Container sind eine leichtgewichtige Virtualisierungstechnologie, die es ermöglicht, eine Anwendung und ihre Abhängigkeiten in einen in sich geschlossenen Container zu packen, der in jeder Computerumgebung konsistent ausgeführt werden kann. Im Gegensatz zu virtuellen Maschinen (VMs), bei denen die Hardware virtualisiert wird, um komplette Betriebssysteme auszuführen, wird bei Containern das Betriebssystem virtualisiert, so dass mehrere Container denselben Betriebssystemkern nutzen können, aber als isolierte Prozesse laufen. Dies macht sie effizienter, portabler und weniger ressourcenintensiv als VMs. Ein Container besteht in der Regel aus den folgenden Komponenten:
Container-Image: ein leichtgewichtiger, portabler Schnappschuss der Anwendungsumgebung, einschließlich Anwendungscode, Bibliotheken und Abhängigkeiten sowie der erforderlichen Laufzeitumgebung. Container-Images dienen als unveränderliche Vorlagen, von denen aus Container gestartet werden.
Container-Engine: Software, die eine Laufzeitumgebung für Container bereitstellt. Sie erleichtert die Erstellung, Ausführung und Verwaltung von Containern aus Container-Images. Docker ist die bekannteste und am weitesten verbreitete Container-Engine, obwohl es auch Alternativen wie containerd und CRI-O gibt.
Container-Orchestrierungssystem: Mit der zunehmenden Verbreitung von Containern wird ein System zur Automatisierung und Verwaltung der Verteilung, Skalierung und des Betriebs von Containern auf mehreren Hosts benötigt. Kubernetes ist das führende Container-Orchestrierungssystem, das dies ermöglicht, obwohl es auch Alternativen wie Docker Swarm und Apache Mesos gibt.
Container Registry: Ein zentrales Repository für die Speicherung und Verteilung von Container-Images. Es ermöglicht Entwicklern und Orchestrierungssystemen den Zugriff und die gemeinsame Nutzung von Container-Images. Docker Hub und Quay.io sind Beispiele für öffentliche Container-Registries, während es auch Optionen für das Hosting privater Registries gibt.
Container-Layering: Container-Images werden in Schichten aufgebaut, was die Wiederverwendung von Komponenten ermöglicht, den Speicherbedarf minimiert und die Bereitstellung von Containern beschleunigt. Wenn ein Container läuft, fügt er eine oberste Schreibschicht hinzu, die Änderungen am Zustand des Containers erfassen kann.
Namespace und Kontrollgruppen (cgroups): Container verwenden Namespaces, um die Isolation zwischen Containern zu gewährleisten und sicherzustellen, dass die Prozesse, das Netzwerk und das Dateisystem eines Containers nicht mit anderen interferieren. Kontrollgruppen verwalten die Ressourcen, die jeder Container nutzen kann, z. B. CPU, Speicher und Netzwerk-E/A, um zu verhindern, dass ein Container die Ressourcen in Anspruch nimmt.
Container haben aufgrund ihrer Effizienz, Portabilität und Benutzerfreundlichkeit bei der Anwendungsentwicklung und -bereitstellung an Beliebtheit gewonnen. Sie erleichtern die Entwicklung moderner, auf Microservices ausgerichteter Anwendungen, indem sie es Entwicklern ermöglichen, Anwendungen in jeder Umgebung schnell zu verpacken und bereitzustellen und so die Flexibilität und betriebliche Effizienz zu verbessern.
Container sind eine leichtgewichtige Virtualisierungstechnologie, die es ermöglicht, eine Anwendung und ihre Abhängigkeiten in einen in sich geschlossenen Container zu packen, der in jeder Computerumgebung konsistent ausgeführt werden kann. Im Gegensatz zu virtuellen Maschinen (VMs), bei denen die Hardware virtualisiert wird, um komplette Betriebssysteme auszuführen, wird bei Containern das Betriebssystem virtualisiert, so dass mehrere Container denselben Betriebssystemkern nutzen können, aber als isolierte Prozesse laufen. Dies macht sie effizienter, portabler und weniger ressourcenintensiv als VMs. Ein Container besteht in der Regel aus den folgenden Komponenten: Container-Image: ein leichtgewichtiger, portabler Schnappschuss der Anwendungsumgebung, einschließlich Anwendungscode, Bibliotheken und Abhängigkeiten sowie der erforderlichen Laufzeitumgebung. Container-Images dienen als unveränderliche Vorlagen, von denen aus Container gestartet werden. Container-Engine: Software, die eine Laufzeitumgebung für Container bereitstellt. Sie erleichtert die Erstellung, Ausführung und Verwaltung von Containern aus Container-Images. Docker ist die bekannteste und am weitesten verbreitete Container-Engine, obwohl es auch Alternativen wie containerd und CRI-O gibt. Container-Orchestrierungssystem: Mit der zunehmenden Verbreitung von Containern wird ein System zur Automatisierung und Verwaltung der Verteilung, Skalierung und des Betriebs von Containern auf mehreren Hosts benötigt. Kubernetes ist das führende Container-Orchestrierungssystem, das dies ermöglicht, obwohl es auch Alternativen wie Docker Swarm und Apache Mesos gibt. Container Registry: Ein zentrales Repository für die Speicherung und Verteilung von Container-Images. Es ermöglicht Entwicklern und Orchestrierungssystemen den Zugriff und die gemeinsame Nutzung von Container-Images. Docker Hub und Quay.io sind Beispiele für öffentliche Container-Registries, während es auch Optionen für das Hosting privater Registries gibt. Container-Layering: Container-Images werden in Schichten aufgebaut, was die Wiederverwendung von Komponenten ermöglicht, den Speicherbedarf minimiert und die Bereitstellung von Containern beschleunigt. Wenn ein Container läuft, fügt er eine oberste Schreibschicht hinzu, die Änderungen am Zustand des Containers erfassen kann. Namespace und Kontrollgruppen (cgroups): Container verwenden Namespaces, um die Isolation zwischen Containern zu gewährleisten und sicherzustellen, dass die Prozesse, das Netzwerk und das Dateisystem eines Containers nicht mit anderen interferieren. Kontrollgruppen verwalten die Ressourcen, die jeder Container nutzen kann, z. B. CPU, Speicher und Netzwerk-E/A, um zu verhindern, dass ein Container die Ressourcen in Anspruch nimmt. Container haben aufgrund ihrer Effizienz, Portabilität und Benutzerfreundlichkeit bei der Anwendungsentwicklung und -bereitstellung an Beliebtheit gewonnen. Sie erleichtern die Entwicklung moderner, auf Microservices ausgerichteter Anwendungen, indem sie es Entwicklern ermöglichen, Anwendungen in jeder Umgebung schnell zu verpacken und bereitzustellen und so die Flexibilität und betriebliche Effizienz zu verbessern.