Was ist ein Container?

Erfahre mehr über Container und die Unterschiede zwischen beliebten Container-Plattformen.

Sten Pittet Sten Pittet

Ein Container ist ein Softwarepaket, das alle Abhängigkeiten enthält – Code, Laufzeit, Konfiguration und Systembibliotheken –, damit es auf jedem Host-System ausgeführt werden kann. Während der Laufzeit werden dem Container auch eigene isolierte Betriebssystemressourcen wie CPU, RAM, Disk und Networking zugeteilt.

Ein Diagramm, das zeigt, wie Container strukturiert sind

Warum benötigt man Container?

Container sind äußerst nützlich, um die Effizienz von DevOps auf mehrere Codebasen und die Mitarbeiterzahl der Entwickler hinweg zu skalieren. Container helfen bei der Skalierung entsprechend der Anzahl Entwickler, indem sichergestellt wird, dass containerisierter Code auf jedem Computer, auf dem der Container bereitgestellt wird, konsistent funktioniert. Neu eingestellte Entwickler können einen Container der Anwendung erhalten, an der sie arbeiten, und sind sofort auf dem Laufenden, um mit der Entwicklung zu beginnen.

Mehrere Codebasis-Szenarien, wie z. B. eine Microservice-Architektur, profitieren von Containern, da diese jeden Microservice portierbar machen und in einem Container isolieren. Mikroservice-Container in Verbindung mit einer robusten Container-Managementplattform erleichtern das Cluster-Management und die Orchestrierung erheblich. Dies ermöglicht dynamische Skalierungsfunktionen, die sich an erhöhten Datenverkehr oder die Belastung einer Anwendung anpassen.

Wie funktionieren sie?

Um Container zu verstehen, müssen wir zuerst über Virtualisierung sprechen. Virtualisierung ist die Aufteilung gemeinsamer Rechenressourcen – CPU, RAM, Festplatte und Netzwerke – in isolierte Ressourcen, die sich des ursprünglichen gemeinsamen Umfangs nicht bewusst sind. Bei der Virtualisierung eines Rechners, entweder mittels Virtual Machines (VMs) oder Container, werden die Ressourcen des Host-Rechners sozusagen in Scheiben geschnitten, um von den virtualisierten Komponenten verwendet werden zu können.

Container virtualisieren das Betriebssystem eines Rechners auf Benutzerbereichsebene. Die Virtualisierung des Benutzerbereichs nutzt die vorhandenen Mechanismen, die die Systemressourcen zwischen separaten Benutzerkonten und Programmen in einem Betriebssystem aufteilen.

Container-Systeme verfügen im Allgemeinen über einen separaten Orchestrierungsdienstprogramm-Befehl oder einen Server-Daemon. Die Mitglieder des DevOps-Teams werden mit dem Orchestrierungsdienstprogramm verbunden, um die einzelnen Container zu erstellen und zu verwalten. Das Orchestrierungsdienstprogramm ist dafür verantwortlich, die Speicherplatzressourcen der Host-Betriebssysteme aufzuteilen, diese Ressourcen Containern zuzuteilen und dann die Container auszuführen und zu überwachen.

Anwendungsbeispiele

Container lösen eine der klassischen Ursachen für Ausfälle bei der Softwareverteilung: "Es funktioniert nicht auf meinem Computer." In diesem unglücklichen Szenario verhält sich Anwendungscode auf einem Computer wie erwartet, aber wenn er auf einem anderen Computer ausgeführt wird, funktioniert er nicht. Dies ist normalerweise auf feine Unterschiede zwischen den beiden Computern zurückzuführen. Dabei kann es sich um nicht übereinstimmende Abhängigkeitsversionen oder andere Konfigurationsdiskrepanzen handeln. Container lösen dieses Problem, indem sie ein statisches wiederholbares Paket mit allem erstellen, was der Anwendungscode ausführen muss.

Container vs. VMs

Container und VMs sind sich in ihren Zielen sehr ähnlich. Beide helfen bei der Verteilung von Anwendungssoftware in einem wiederholbaren isolierten Paket. Sie unterscheiden sich jedoch darin, welchen Anteil des Hardware-Stacks sie zu virtualisieren versuchen. VMs simulieren den gesamten Rechner und das Betriebssystem. Dies bedeutet, dass VMs CPU-, RAM-, Dateisystem- und Netzwerkressourcen simulieren.

Container virtualisieren nur den Benutzerbereich eines bestehenden Betriebssystems. In diesem Sinne sind Container viel leichtgewichtiger als VMs. Container können in einem vorhandenen Host-Betriebssystem verwendet werden.

Container-Laufzeittools

Eine Container-Laufzeit ist das Toolset, mit dem die Abhängigkeiten angegeben werden, die in einen Container gepackt werden müssen. Die Laufzeitumgebung erstellt dann den Container und führt ihn aus.

Docker

Die beliebteste und am weitesten verbreitete Container-Laufzeit. Docker startete die explosive moderne DevOps-Verbreitung containerbasierter Infrastruktur. Docker verfügt über ein öffentliches Repository voller Container mit beliebten Open-Source-Tools.

Linux-Container - LXC

Linux-Container verwenden für die Container-Laufzeit eine Sammlung nativer Open-Source-Linux-Dienstprogramme. Das Ziel des Linux-Containers ist es, eine anbieterneutrale Umgebung für die Entwicklung von Container-Technologien anzubieten. Docker verwendet übrigens LXC hinter den Kulissen. Linux-Container konzentrieren sich darauf, die Container-Erfahrung so nah wie möglich an dem mit einer VM auszurichten.

CRI-O

Eine neue Container-Spezifikation, die auf das Container-Managementsystem von Kubernetes ausgerichtet ist und leichtgewichtig sein soll. CRI-O implementiert die Open Container Initiative (OCI). OCI ist ein Standard, der von Mitwirkenden aus Unternehmen wie Red Hat, Intel und IBM entwickelt wurde.

rkt und rktlet

rkt (Aussprache: "Rocket") ist eine Container-Spezifikation, die einen sicherheitsorientierten Ansatz verfolgt. rkt-Container erlauben keine unsicheren Funktionen, es sei denn, ein Benutzer deaktiviert Sicherheitsfunktionen explizit. rkt ist Pod-nativ und dadurch gut für das Kubernetes-Container-Managementsystem geeignet.

Plattformen für das Container-Management

Container-Managementplattformen sind Tools auf höherer Ebene, die verwendet werden, um eine Gruppe oder einen Cluster von Laufzeit-Containern zu orchestrieren. Container Managementplattformen verwenden ein zugrunde liegendes Container-Laufzeitsystem. Einige Container-Managementplattformen bieten die Möglichkeit zu einer individuellen Kompilierung mehrerer Container-Laufzeiten.

Kubernetes

Kubernetes ist ein Open-Source-Container-Managementsystem, das von Google entwickelt und veröffentlicht wurde. Kubernetes wird verwendet, um einen verteilten Cluster von gehosteten Containern zu erstellen. Kubernetes bietet robuste Tools zur Orchestrierung von Container-Clustern, die Zustandsüberwachung, Deployment, Failover und automatische Skalierung umfassen.

Docker

Docker bietet auch eine Reihe von Dienstprogrammen zum Starten, Orchestrieren und Verwalten eines Clusters von Containern. Docker ist so weit verbreitet, dass sein Container-Definitionssystem von vielen Container-Managementsystemen von Drittanbietern wie Amazon ECS und Kubernetes unterstützt wird.

Amazon ECS

Amazon Elastic Container Service ist ein cloudbasierter Service, der die Verwaltung von Docker-Containern in einem Cluster erleichtert. ECS verfügt über eine leistungsstarke API und ist eng in den Rest der Amazon Cloud-Suite integriert, was leistungsstarke DevOps-Workflows ermöglicht.

OpenShift

Die OpenShift-Container-Plattform ist ein Red Hat Linux-Produkt für Unternehmen. Es ist ein Hybridprodukt, das Kubernetes- und OpenShift-Cloud-Integration bietet. Openshift ist eine Cloud-Plattform, der viele Unternehmen vertrauen, und die in andere Red Hat Tools integriert wird.

Fazit

Container sind ein kritischer Teil des modernen DevOps-Toolsets. Unabhängig davon, für welche Laufzeit- oder Container-Plattform du dich entscheidest, sorgen die Vorteile von Containern für ein effektiveres Arbeiten. Container tragen dazu bei, sowohl den lokalen Entwicklungsprozess als auch den Remote-Deployment-Prozess zu rationalisieren und gleichzeitig sicherzustellen, dass du deinen Kunden ein qualitativ hochwertigeres Softwareprodukt bereitstellen kannst.