Definition
Ein Container ist eine leichtgewichtige, portable und isolierte Laufzeitumgebung, die eine Anwendung zusammen mit ihren Abhängigkeiten kapselt. Dadurch kann die Anwendung konsistent und unabhängig von der zugrunde liegenden Infrastruktur ausgeführt werden. Container trennen Prozesse und Ressourcen eines Systems, um eine kontrollierte Umgebung für Software bereitzustellen.
Im Unterschied zu virtuellen Maschinen teilen sich Container den Betriebssystem-Kernel des Host-Systems, was sie ressourcenschonender und schneller startend macht. Sie enthalten lediglich die für die Anwendung notwendigen Bibliotheken und Dateien, wodurch sie deutlich schlanker sind als vollständige virtuelle Maschinen.
Was bedeutet das für Ihr Unternehmen?
Container machen eine Anwendung leichter umziehbar, weil sie samt ihrer Abhängigkeiten verpackt ist und auf jedem passenden Server gleich läuft. Dafür kommt eine zusätzliche Technikschicht hinzu, die gepflegt, abgesichert und von Ihrem Dienstleister beherrscht werden muss. Für eine einzelne Website oder eine kleine Geschäftsanwendung ist ein sauber eingerichteter Server oft leichter zu betreuen; Container lohnen sich eher bei vielen Diensten oder häufigen Umgebungswechseln.
Hintergrund und Entwicklung
Die Idee von Containern basiert auf Betriebssystem-Funktionalitäten wie Linux Namespaces und Control Groups (cgroups), die im Laufe der 2000er Jahre in den Linux-Kernel aufgenommen wurden. Diese Technologien ermöglichen die Isolation von Prozessen und Ressourcen innerhalb eines Betriebssystems.
Mit der Veröffentlichung von Docker im Jahr 2013 wurde Containerisierung populär und für Entwickler zugänglich. Docker standardisierte die Erstellung, Verteilung und Ausführung von Containern und trug maßgeblich zur Verbreitung bei. Seitdem haben sich verschiedene Container-Technologien und -Orchestrierungssysteme etabliert.
Funktionsweise
Container laufen als isolierte Prozesse auf dem Host-Betriebssystem und nutzen Namespaces zur Trennung von Netzwerk, Dateisystem und Prozessbaum. Control Groups begrenzen die Ressourcennutzung wie CPU, Arbeitsspeicher und I/O, um eine stabile Ausführung sicherzustellen.
Die Container-Images, aus denen Container gestartet werden, bestehen aus schreibgeschützten Schichten, die übereinander gestapelt sind. Änderungen im Container werden in einer obersten, schreibbaren Schicht gespeichert, was effiziente Speicherverwaltung und schnelle Bereitstellung ermöglicht.
Einsatzgebiete
Container werden vor allem in der Softwareentwicklung und im Betrieb von Anwendungen eingesetzt, um eine konsistente Ausführungsumgebung zu gewährleisten. Sie erleichtern Continuous Integration und Continuous Deployment (CI/CD) durch reproduzierbare Builds.
Darüber hinaus sind Container ein zentraler Bestandteil von Cloud-Native-Architekturen und Microservices. Sie ermöglichen die flexible Skalierung und Verwaltung von Anwendungen in verteilten Systemen und werden häufig in Kombination mit Orchestrierungstools wie Kubernetes verwendet.
Abgrenzung zu verwandten Technologien
Im Vergleich zu virtuellen Maschinen teilen sich Container den Kernel des Host-Betriebssystems und sind daher ressourcenschonender und schneller startend, bieten jedoch eine geringere Isolation auf Betriebssystemebene. Virtuelle Maschinen emulieren komplette Hardware und können verschiedene Betriebssysteme auf einem Host ausführen.
Alternativen zu Docker als Container-Laufzeit sind beispielsweise containerd oder CRI-O. Im Bereich der Orchestrierung konkurrieren Kubernetes, Docker Swarm und Apache Mesos. Zudem gibt es Unterscheidungen zu klassischen chroot-Umgebungen, die weniger Isolation und Portabilität bieten.