Virtualisierung für Container
- 13 Minuten
Bei der Virtualisierung mit Hypervisoren wie Xen und Hyper-V wird ein physischer Server in mehrere virtuelle Server partitioniert und die jeweils ausgeführten Workloads werden isoliert. VMs haben allerdings auch Nachteile:
Ressourcenanforderungen: VMs erfordern viel RAM. Wenn ein Windows-Server 10 virtuelle Windows-Computer hostet, wird Windows 11-mal in den Arbeitsspeicher geladen – eine Kopie für den Server selbst und eine Kopie für jeden virtuellen Computer. VMs können eine einzelne Instanz des Betriebssystems im Arbeitsspeicher nicht gemeinsam nutzen, da das Ziel der Virtualisierung darin besteht, virtuelle Server zu erstellen, die sich genauso wie physische Server verhalten. Zwei VMs können ein Betriebssystem nicht gemeinsam nutzen, mehr als zwei physische Server können dies jedoch. Dies gilt unabhängig davon, ob es sich bei dem Betriebssystem um Windows, Linux oder ein anderes Betriebssystem (z. B. macOS) handelt.
Transportierbarkeit: VM-Images sind tendenziell sehr groß (häufig in der Größenordnung von mehreren zig oder hundert Gigabyte), da sie auch eine komplette Kopie des Betriebssystems speichern. Dadurch wird ihre Transportierbarkeit eingeschränkt. Ein 1-MB-Image kann recht einfach von einem Computer auf einen anderen übertragen werden, sogar über eine mäßig langsame Verbindung. Ein VM-Image mit einer Größe von 200 GB kann dagegen nicht einfach über eine typische Netzwerkverbindung übertragen werden. Es kann mithilfe physischer Medien, z. B. eines USB-Sticks oder einer Festplatte, übertragen werden. Dies stellt jedoch logistische Herausforderungen in Cloud Computing-Szenarien dar, bei denen Sie keinen Zugriff auf die physischen Server in einem Rechenzentrum haben.
Startzeit: Das Starten einer VM Computers erfolgt ähnlich wie das Starten eines physischen Computers. Die virtualisierte Hardware muss eingeschaltet und initialisiert werden, das Betriebssystem muss geladen und initialisiert werden, die Gerätetreiber müssen geladen und mit der virtualisierten Hardware verbunden werden usw. Folglich kann das Starten einer VM, nachdem sie erstellt wurde, eine Minute oder länger dauern. Eine Startzeit von einigen Minuten ist im Vergleich zur Zeit, die für Beschaffung, Installation und Konfiguration eines physischen Servers erforderlich ist, vernachlässigbar, aber eine bedeutende Einschränkung, wenn virtuelle Computer spontan erstellt werden, um den steigenden Bedarf zu erfüllen, oder wenn laufend VMs erstellt und gelöscht werden, um veränderliche Workloads zu verarbeiten.
Dies sind nur einige der Gründe, warum Container weit verbreitet eingesetzt werden, nicht nur im Cloud Computing, sondern auch in lokalen Rechenzentren und einzelnen Computern. In dieser Lektion wird erläutert, was Container sind, wie sie funktionieren und welche Vorteile sie bieten. Darüber hinaus wird Docker, die weltweit beliebteste Containerisierungsplattform, vorgestellt. Außerdem werden einige Beispiele gezeigt, wie Docker in gängige Cloudplattformen integriert wurde.
Was ist ein Container?
Container revolutionieren die IT und die Softwareentwicklung. Sie ermöglichen das Bündeln von Software und Dateien in eigenständige Pakete, so genannte Containerimages, die konsistent und vorhersagbar auf unterschiedlichen Computern (physisch oder virtuell) ausgeführt werden. Die folgende Beschreibung wurde der Docker-Website entnommen:
Ein Container ist eine Standardsoftwareeinheit, die den Code und alle zugehörigen Abhängigkeiten enthält, damit die Anwendung ausgehend von einer Computerumgebung schnell und zuverlässig in einer anderen ausgeführt wird. Bei einem Docker-Containerimage handelt es sich um ein einfaches, eigenständiges, ausführbares Softwarepaket mit allem, was zum Ausführen einer Anwendung erforderlich ist: Code, Runtime, Systemtools, Systembibliotheken und Einstellungen.
Während Hypervisoren Hardware virtualisieren, virtualisieren Container Betriebssysteme. Abbildung 7 veranschaulicht die wichtigsten Unterschiede zwischen virtuellen Computern und Containern1. Auf der linken Seite hostet ein Server eine Kopie des Betriebssystems und eine Kopie der Docker-Runtime. Außerdem werden sechs Anwendungen in sechs Containern gehostet, die jeweils das Betriebssystem des Hosts nutzen. Auf der rechten Seite hostet derselbe Server drei VMs, die jeweils eine eigene Kopie des Betriebssystems laden. Ein gegebener Server kann aufgrund der geringeren Ressourcenanforderungen des Containers normalerweise viel mehr Container hosten als VMs.

Abbildung 7: Container und virtuelle Computer im Vergleich
Container sind virtuellen Computern insofern ähnlich, als dass sie eine vorhersagbare und isolierte Umgebung bereitstellen, in der Software ausgeführt werden kann. Da Container jedoch kleiner als VMs sind, benötigen sie weniger RAM und können einfacher von Computer zu Computer übertragen werden. Darüber hinaus starten sie schneller, oftmals in ein oder zwei Sekunden, da sie weder Hardware virtualisieren noch ein Betriebssystem laden und initialisieren müssen. Mehrere Container, die auf einem einzelnen Computer ausgeführt werden, verwenden denselben Betriebssystemkernel, auch wenn die Container selbst vollkommen verschieden sind, d. h. andere Software enthalten und aus unterschiedlichen Containerimages erstellt werden.
Container und virtuelle Computer schließen sich nicht gegenseitig aus. Sie werden häufig sogar zusammen verwendet. Windows-Benutzer, die in Linux-Containern enthaltene Software ausführen, führen Linux in einer VM aus und hosten Docker sowie die containerisierte Software in der VM. In der Cloud werden Container genauso wie andere Cloudworkloads in VMs gehostet.
Container ersetzen keine virtuellen Computer und dürfen nicht als funktionales Äquivalent betrachtet werden. Im Gegensatz zu virtuellen Computern bieten Container keine Möglichkeit, mehrere Betriebssysteme nebeneinander auf einem Computer auszuführen. Wenn auf dem Hostcomputer beispielsweise Linux ausgeführt wird, müssen alle Container auf diesem Computer ebenfalls Linux verwenden. (Windows-Benutzende führen häufig Linux-Container unter Windows aus, was jedoch funktioniert, da Docker eine Linux-VM auf dem Windows-Computer ausführt und die Container in der VM hostet.) Da Container keine Hardware virtualisieren, sind sie außerdem nicht für Anwendungen geeignet, die Aufgaben auf Systemebene ausführen, die eine direkte Interaktion mit der Hardware erfordern. Sie können sich das einfach so vorstellen: Hypervisoren virtualisieren einen ganzen Computer einschließlich der zugehörigen Hardware, während Container Software virtualisieren und das Betriebssystem des Hosts als Betriebssystemplattform verwenden.
Docker
Docker ist mit weitem Abstand die beliebteste Containerplattform. Es handelt sich um eine kostenlose Open-Source-Anwendung, die auf allen wesentlichen Linux-Distributionen und Windows Server 2016 läuft. Im Jahr 2015 hat Docker die Spezifikation für Containerimages und den Runtimecode der Open Container Initiative (OCI) kostenlos zur Verfügung gestellt, um das Containerökosystem zu standardisieren und zu erweitern. 2017 stellte Docker der Cloud Native Computing Foundation (CNCF) eine Containerruntime als Industriestandard zur Verfügung. Diese Runtime wurde unter besonderer Berücksichtigung von Einfachheit, Stabilität und Portabilität erstellt.
Abbildung 8 veranschaulicht die Architektur eines Systems, das Anwendungen in Docker-Containern ausführt. An erster Stelle steht der Docker-Client, ein Tool, mit dem Container und Containerimages erstellt, ausgeführt und verwaltet werden können. (Ein Containerimage ist eine Blaupause für einen laufenden Container, so wie ein VM-Image definiert, was in eine laufende VM geladen wird.) Es gibt verschiedene Docker-Clients, darunter die eigene Befehlszeilenschnittstelle von Docker, die auf allen gängigen Betriebssystemen läuft, und Kitematic, das über eine grafische Benutzeroberfläche verfügt und unter Windows und macOS läuft. Docker hat Kitematic im Jahr 2015 gekauft und in die Docker-Toolbox integriert, die kostenlos verfügbar ist.

Abbildung 8: Docker-Architektur
Nachdem ein Containerimage erstellt wurde, wird es in ein Repository in einer Containerregistrierung hochgeladen. Der Zweck einer Containerregistrierung besteht darin, Containerimages zu speichern und diese entweder öffentlich oder privat verfügbar zu machen. Docker umfasst eine cloudbasierte Containerregistrierung mit der Bezeichnung Docker Hub, die Benutzern eine unbegrenzte Anzahl kostenloser öffentlicher Repositorys und ein kostenloses privates Repository zur Verfügung stellt. Außerdem ist wird die Möglichkeit geboten und ausdrücklich dazu aufgerufen, eigene Registrierungen zu erstellen. Dazu wird die Open-Source-Software Docker Registry zur Verfügung gestellt. Dies ist ein Grund dafür, warum bedeutende Clouddienstanbieter wie Amazon, Microsoft und Google Docker-kompatible Registrierungen in ihren Cloudplattformen anbieten konnten.
Ein Container wird gestartet, indem vom Docker-Client ein Befehl an den Docker-Daemon mit Angabe des Images, aus dem der Container erstellt werden soll, übergeben wird. (Ein Daemon ist ein Programm, das im Hintergrund auf dem Hostcomputer läuft.) Der Daemon erstellt dann einen Container und lädt das Image in diesen. Anschließend kann ein Container über Befehle vom Docker-Client gestartet und beendet werden. Der Docker-Client und der Docker-Daemon müssen sich nicht auf demselben Computer befinden. In einem typischen Szenario wird der Client auf einem Computer ausgeführt, während der Daemon auf einem Remoteserver ausgeführt wird. Der Client überträgt Befehle über das Secure Shell-Protokoll (SSH) an den Daemon.
Containerdienste im Cloud Computing
Während Benutzer eine IaaS-Herangehensweise für Container verwenden können, indem sie virtuelle Computer erstellen und die Docker-Runtime darin installieren, stellen Clouddienstanbieter wegen der anerkannt hohen Bedeutung von Containern PaaS-Dienste zur Verfügung, um die Ausführung von containerisierten Anwendungen in der Cloud zu unterstützen. Azure stellt Azure Container Instances, eine robuste, skalierbare und benutzerfreundliche Umgebung zum Hosten von containerisierten Anwendungen, sowie die Azure Container Registry zur Verfügung, mit der Containerimages in Azure anstatt in Docker Hub gehostet oder andere externe Registrierungen schnell in Azure Container Instances geladen werden können. Amazon stellt AWS Elastic Container Registry (ECR) und AWS Elastic Container Service (ECS) zur Verfügung, während Google Container Registry und Container in Compute Engine bietet.
Abbildung 9 veranschaulicht, wie ECR und ECS von Amazon zusammenarbeiten, um einen cloudbasierten Docker-Stapel zum Hosten von Containern und Containerimages bereitzustellen2. Containerimages werden in ECR erstellt und hochgeladen. Dabei handelt es sich ähnlich wie Docker Hub um eine Docker-kompatible Containerregistrierung. (Containerimages, die in AWS ausgeführt werden, müssen nicht in ECR gespeichert werden. Die Speicherung bietet jedoch mehrere Vorteile, z. B. eine differenzierte Zugriffssteuerung mit AWS Identity, automatische Verschlüsselung, Unterstützung einer Versionsverwaltung für Containerimages und schnelleres Laden, insbesondere dann, wenn die Containerimages im selben Rechenzentrum gespeichert und ausgeführt werden.) Von dort aus werden Images in Container geladen, die in ECS oder anderen Clouddiensten gehostet werden.
Abbildung 9: Container in AWS
Azure Container Registry und Azure Container Instances funktionieren ähnlich, verwenden aber Microsoft Entra anstelle von AWS Identity, um den Zugriff auf Containerimages zu steuern. Ein Unterschied bei der Unterstützung von Containern in AWS und Azure besteht darin, dass AWS eine Kombination von Open-Source-Software und proprietärer Technologie verwendet, während der Containerstapel von Azure zu 100 % aus Open Source besteht. Daher funktioniert jedes Tool, das mit Docker funktioniert, auch mit Azure. Darüber hinaus umfassen Azure Cloud Shell und Azure CLI Befehle zum Erstellen und Verwalten von Docker-Containerimages. Diese Befehle machen die Notwendigkeit von Docker-Clients nicht vollständig überflüssig, decken aber die häufigsten Anwendungsfälle ab und sind für Azure optimiert.
Seit kurzem bieten Clouddienstanbieter Containerunterstützung für ausgewählte PaaS-Dienste. Azure bietet z. B. Azure Web-Apps für Container. Dabei handelt es sich im Wesentlichen um einen Azure App Service mit der zusätzlichen Möglichkeit, Software aus einem Containerimage zu laden. Amazon hat ähnliche Schritte zur Integration von Docker-Containern in Elastic Beanstalk unternommen.
Containerorchestrierung
Docker stellt die Infrastruktur zum Erstellen und Ausführen von Containern bereit. Allerdings ist mehr Überwachungsaufwand erforderlich, um die Aktionen von Containern zu orchestrieren und containerisierte Workloads genauso zu skalieren wie virtuelle Computer. Obwohl es eine Reihe von Tools für die Containerorchestrierung gibt, setzt die Branche weitgehend Kubernetes, das aus einem Open Source-Projekt von Google entstanden ist, als Orchestrator ein. Heutzutage stellen bedeutende Clouddienstanbieter verwaltete Implementierungen von Kubernetes zur Verfügung, mit denen problemlos Container auf ihren Plattformen ausgeführt und mit Kubernetes verwaltet werden können. "EKS" in Abbildung 9 steht für Elastic Kubernetes Service. Azure bietet einen ergänzenden Dienst mit dem Namen Azure Kubernetes Service (AKS), während die Google Cloud Platform die Kubernetes Engine zur Verfügung stellt.
Verweise
- Docker (2019). Was ist ein Container?https://www.docker.com/resources/what-container
Amazon (2019). Funktionsweise von Amazon ECS https://aws.amazon.com/ecs/.
Überprüfen Sie Ihr Wissen
Feedback
War diese Seite hilfreich?
No
Benötigen Sie Hilfe zu diesem Thema?
Möchten Sie versuchen, Ask Learn zu verwenden, um Sie durch dieses Thema zu klären oder zu leiten?
