Was ist der Unterschied zwischen Containern und virtuellen Maschinen?


Was ist der Unterschied zwischen Containern und virtuellen Maschinen?

Container und virtuelle Maschinen sind Technologien, die Ihre Anwendungen unabhängig von Ihren IT-Infrastruktur-Ressourcen machen. Ein Container ist ein Software-Codepaket, das den Code einer Anwendung, ihre Bibliotheken und andere Abhängigkeiten enthält. Containerisierung macht Ihre Anwendungen portabel, sodass derselbe Code auf jedem Gerät ausgeführt werden kann. Eine virtuelle Maschine ist eine digitale Kopie eines physischen Computers. Sie können mehrere virtuelle Maschinen mit ihren eigenen Betriebssystemen auf demselben Host-Betriebssystem ausführen. Darüber hinaus können Sie eine virtuelle Maschine erstellen, die alles enthält, was für die Ausführung Ihrer Anwendung erforderlich ist.

Wo werden Container und virtuelle Maschinen eingesetzt?

Container und virtuelle Maschinen sind beides Bereitstellungs-Technologien. Im Softwareentwicklungs-Lebenszyklus ist die Bereitstellung der Mechanismus, der für eine effiziente Ausführung einer Anwendung auf einem Server oder Gerät sorgt. Die Anwendung benötigt mehrere zusätzliche Softwarekomponenten, die Abhängigkeiten genannt werden und eng mit dem zugrunde liegenden Betriebssystem des Servers verwandt sind. Alle diese verschiedenen Softwaresschichten zwischen dem Anwendungscode und dem physischen Gerät werden als die Anwendungsumgebung bezeichnet.

Herausforderungen in der Softwareentwicklung

Unternehmen müssen in der Regel Anwendungen in mehrfachen Umgebungen bereitstellen – zum Beispiel wird in der Linux-Umgebung entwickelt und in Windows getestet – bevor neue Funktionen veröffentlicht werden. Das Verschieben der Anwendung zwischen den Umgebungen kann zu Fehlern und Störungen führen, was zu versäumten Abhängigkeiten führt und wiederum die Produktivität beeinträchtigt. Eine Anwendung in einer einzelnen Umgebung zu entwickeln und zu testen beschränkt wiederum die potenziellen Nutzen. Hier sind einige Beispiele:

  • Sie müssen eventuell verschiedene Versionen für Benutzer mit unterschiedlichen Betriebssystemen entwickeln
  • Ihre Systemadministratoren müssen sämtliche Umgebungen einheitlich aktualisieren und warten, was die Entwicklungskosten steigert
  • Es könnte für Sie eine Herausforderung darstellen, Ihre Anwendungen von On-Premises-Rechenzentren in die Cloud oder zwischen verschiedenen Cloud-Umgebungen zu verschieben

Der Zweck von virtuellen Maschinen

Historisch betrachtet wurde die Technologie für virtuelle Maschinen entwickelt, um die zunehmende physische Hardware-Kapazität und Rechenleistung effizient zu nutzen. Das Ausführen einer einzelnen Anwendungsumgebung auf einem einzelnen physischen Server hat die Harware-Ressourcen nicht genügend ausgenutzt. Virtuelle Maschinen ermöglichen es Unternehmen, mehrfache Betriebssysteme zu installieren und mehrfache Umgebungen auf derselben physischen Maschine zu erstellen.

Der Zweck von Containern

Container wurden erschaffen, um auf einer vorhersehbaren und wiederholbaren Weise Anwendungen zu verpacken und über mehrfache Umgebungen hinweg auszuführen. Anstatt die Umgebung neu zu erstellen, verpacken Sie die Anwendung, damit sie in allen Arten von physischen oder virtuellen Umgebungen ausgeführt werden kann. Dies ist ähnlich wie einen Astronauten in einen Raumanzug zu stecken, anstatt auf einem anderen Planeten die Atmosphäre der Erde nachzubilden.

Ähnlichkeiten zwischen Containern und virtuellen Maschinen

Container und virtuelle Maschinen ermöglichen die vollständige Isolierung von Anwendungen, sodass Sie sie in mehrfachen Umgebungen ausführen können. Sie virtualisieren, oder abstrahieren die zugrunde liegende Infrastruktur, sodass Benutzer sich nicht damit beschäftigen müssen. Sie ermöglichen es auch, Ihre Software-Infrastruktur in eine einzelne Datei, eine sogenannte Image-Datei, zu verpacken. Sie können die Image-Datei verwenden, um Ihre Anwendung irgendwo rasch einzurichten und auszuführen. Zusätzlich können Sie Software-Prozesse verwenden, um Systemkonfigurationen zu verwalten oder auf die gleichzeitige Verwaltung von Tausenden von Anwendungen zu skalieren. Die Rolle und das Ausmaß der Nutzung von Containern und virtuellen Maschinen variiert jedoch, je nachdem, wo und wie die Anwendung bereitgestellt wird.

Wichtige Unterschiede: Container versus virtuelle Maschinen

Container virtualisieren das Betriebssystem, sodass die Anwendung selbstständig auf jeder Plattform ausgeführt werden kann. Virtuelle Maschinen gehen einen Schritt weiter und virtualisieren physische Maschinen, sodass Sie Ihre Hardware-Ressourcen effizient nutzen können. Im Folgenden werden weitere Unterschiede angeführt.

Ihre Funktionsweise

Die Container-Technologie umfasst die Erstellung autarker Softwarepakete, die unabhängig von den Maschinen, auf denen sie ausgeführt werden, konsistent funktionieren. Softwareentwickler erstellen Container-Images – Dateien mit den für die Ausführung der Anwendung erforderlichen Informationen – und stellen diese bereit. Container-Images sind schreibgeschützt und können vom Computersystem nicht geändert werden.

Die Technologie für virtuelle Maschinen umfasst die Installation von Virtualisierungs-Software auf einem physischen Server oder Computer. Der physische Computer wird als Host-Computer und die virtuelle Maschine als Gast bezeichnet. Sie können das Gastbetriebssystem und seine Anwendungen nach Bedarf konfigurieren und aktualisieren, ohne das Host-Betriebssystem zu beeinträchtigen.

Kerntechnologie

Virtuelle Maschinen verwenden Hypervisors, die zwischen dem Gastbetriebssystem und dem Host-Betriebssystem kommunizieren. Der Hypervisor koordiniert die Ressourcenfreigabe, sodass die virtuelle Maschine isoliert neben mehreren anderen auf derselben Hardware ausgeführt wird.

Container verwenden andererseits eine Container-Engine oder Container-Laufzeit. Dabei handelt es sich um Software, die als Vermittler zwischen den Containern und dem Betriebssystem fungiert und die von der Anwendung benötigten Systemressourcen bereitstellt und verwaltet. Docker ist die beliebteste Open-Source-Container-Engine.

Größe

Image-Dateien von virtuellen Maschinen sind größer (mehrere GB), nachdem sie ihr eigenes Betriebssystem enthalten. Mehr Ressourcen bedeutet, dass Sie ganze Server, Datenbanken, Desktops und Netzwerke duplizieren, zerteilen, abstrahieren und emulieren können. Container-Dateien sind leichter und Sie können sie in MB bemessen. Container verpacken nur die Ressourcen, die zum Ausführen einer einzelnen Anwendung notwendig sind.

Anwendungsfälle für Container versus virtuelle Maschinen

Hier führen wir einige Faktoren an, die Sie in Betracht ziehen sollten, wenn Sie für die Bereitstellung von Anwendungen zwischen virtuellen Maschinen und Containern auswählen.

Konfiguration der Umgebung

Virtuelle Maschinen verleihen den Entwicklern mehr Kontrolle über die Anwendungsumgebung. Sie können System-Software manuell installieren, Snapshots von Konfigurationszuständen erstellen und bei Bedarf auf einen früheren Zustand wiederherstellen. Sie sind nützlich zum Erproben von Ideen und Experimentieren oder zum Testen verschiedener Umgebungen, um die Leistung einer Anwendung zu steigern.

Container bieten statische Definitionen von Konfigurationen, sobald die besten ausgewählt sind.

Geschwindigkeit der Softwareentwicklung

Virtuelle Maschinen sind Full-Stack-Systeme und können aufwendig zu entwickeln und zu regenerieren sein. Sämtliche Änderungen müssen zeitaufwendig Validiert werden, da es eine Regenerierung der Umgebung erfordert.

Container sind eine bessere Wahl, wenn Sie öfters neue Funktionen entwickeln, testen und veröffentlichen möchten. Nachdem sie ausschliesslich hochgradige Software enthalten, lassen sie sehr schnelle Änderungen und Wiederholungen zu.

Skalierbarkeit

Virtuelle Maschinen belegen mehr Speicherplatz und Sie müssen mehr Hardware in Ihren On-Premises-Rechenzentren bereitstellen. Der Wechsel zu Cloud-Instances reduziert die Kosten, jedoch bringt die Migration Ihrer gesamten Umgebungen seine eigenen Herausforderungen mit sich.

Container nehmen weniger Platz ein und sind einfacher zu skalieren. Noch wichtiger, bieten Container eine fein-abgestufte Steuerung der Skalierbarkeit von Anwendungen, indem sie Ihnen die Verwendung von Microservices ermöglichen. Microservices sind ein architekturbezogener und organisatorischer Ansatz in der Softwareentwicklung, bei dem Software aus kleinen unabhängigen Services besteht, die über sorgfältig definierte APIs kommunizieren. Mit Containern können Sie individuelle Microservices nach Bedarf skalieren.

Weitere Informationen über Microservices »

Mehr über APIs erfahren »

Zusammenfassung der Unterschiede: Container versus virtuelle Maschinen

Merkmale

Container

Virtuelle Maschine

Definition

Ein Software-Codepaket, das den Code einer Anwendung, ihre Bibliotheken und andere Abhängigkeiten enthält, die zusammen die Ausführungsumgebung der Anwendung bilden.

Ein digitales Replikat einer physischen Maschine. Partitioniert die physische Hardware in mehrfache Umgebungen.

Virtualisierung

Virtualisiert das Betriebssystem.

Virtualisiert die zugrunde liegende physische Infrastruktur.

Verkapselung

Eine Softwareschicht über dem Betriebssystem, die zum Ausführen der Anwendung oder einer Anwendungskomponente notwendig ist.

Das Betriebssystem, sämtliche Schichten darüber, mehrfache Anwendungen.

Technologie

Eine Container-Engine koordiniert mit dem zugrunde liegenden Betriebssystem oder den Ressourcen. 

Ein Hypervisor koordiniert mit dem zugrunde liegenden Betriebssystem oder der Hardware. 

Größe

Leichteres Gewicht (im Ausmaß von MB).

Viel größer (im Ausmaß von GB).

Kontrolle

Weniger Kontrolle der Umgebung außerhalb des Containers.

Mehr Kontrolle über die gesamte Umgebung.

Flexibilität

Flexibler. Sie können schnell zwischen On-Premises- und cloudbasierten Umgebungen migrieren.

Weniger flexibel. Migration ist mit Herausforderungen verbunden.

Skalierbarkeit

Hochgradig skalierbar. Fein-abgestufte Skalierbarkeit mit Microservices ermöglicht.

Skalieren kann teuer sein. Erfordert für eine kostengünstige Skalierung den Wechsel von On-Premises- zu Cloud-Instances.

  Erfahren Sie mehr über Container Erfahren Sie mehr über virtuelle Machinen

 

Wie kann AWS Ihnen mit Ihren Containern und virtuellen Maschinen helfen?

AWS hat mehrere Services zur Unterstützung all Ihrer Anforderungen für die Bereitstellung von Anwendungen. Hier sind einige Beispiele:

  • AWS App2Container ist ein Containerisierungs-Tool, mit dem Softwareentwickler Legacy-Anwendungen modernisieren können. Entwickler verwenden AWS App2Container, um Java- und .NET-Anwendungen in containerisierte Anwendungen umzuwandeln.
  • Amazon Elastic Container Registry (Amazon ECR) ist ein hochverfügbares und sicheres privates Container-Repository, das es Ihnen erleichtert, Docker-Container-Images zu speichern und zu verwalten.
  • Amazon Elastic Container Service (Amazon ECS) ist ein hoch skalierbarer, sehr leistungsfähiger Container-Orchestrierungs-Service zum Ausführen von Docker-Container in der AWS Cloud.
  • Amazon Elastic Compute Cloud (Amazon EC2) ermöglicht Ihnen eine fein-abgestufte Steuerung Ihrer Cloud-Instances, und Sie können die Prozessoren, Speicherung und Netzwerke frei auswählen. 
  • AWS Fargate ist eine Technologie für Amazon ECS, mit der Sie Docker-Container ausführen können, ohne Infrastruktur bereitzustellen oder zu verwalten.
  • VMWare Cloud in AWS vereinfacht und beschleunigt die Migration von missionskritischen Produktions-Workloads von virtuellen On-Premises-Maschinen zur AWS Cloud.

Beginnen Sie mit der Virtualisierung und Containerisierung, indem Sie noch heute ein kostenloses AWS-Konto erstellen.

Nächste Schritte mit AWS

Beginnen Sie die Erstellung mit Containern

Erste Schritte mit Containern in AWS

Weitere Informationen 
Beginnen Sie Virtuelle Maschinen zu erstellen

Informationen zu den ersten Schritten mit Virtuelle Maschinen in AWS

Weitere Informationen