Was ist der Unterschied zwischen Docker und einer VM?


Was ist der Unterschied zwischen Docker und einer VM?

Docker und virtuelle Maschinen (VMs) sind zwei Technologien, die bei der Anwendungsbereitstellung verwendet werden. Im Lebenszyklus der Softwareentwicklung wird bei der Bereitstellung der Anwendungscode für die Ausführung durch die Endbenutzer vorbereitet. Docker ist eine Open-Source-Plattform, mit der Entwickler Software in standardisierte Einheiten, sogenannte Container, verpacken. Ein Container enthält sowohl den Anwendungscode als auch seine Umgebung, einschließlich Bibliotheken, Systemtools und Laufzeit. Mit Docker können Sie Anwendungen auf jedem Computer bereitstellen und skalieren und sicherstellen, dass Ihr Code konsistent ausgeführt wird. 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. Entwickler konfigurieren eine virtuelle Maschine, um die Umgebung der Anwendung zu erstellen. Es ist auch möglich, Docker-Container auf virtuellen Maschinen auszuführen.

Mehr über Docker lesen »

Virtualisierung: Docker im Vergleich zu virtueller Maschine

Virtualisierung ermöglicht die Erstellung einer virtuellen Instance realer Ressourcen wie Server und Netzwerke. In der Datenverarbeitung ermöglicht die Virtualisierung den Betrieb mehrerer isolierter Instances einer virtualisierten Komponente auf der realen Komponente.

So können beispielsweise mehrere virtuelle Server auf einem physischen Server laufen. Indem reale Ressourcen auf mehrere virtuelle Instanzen aufgeteilt werden, sind sie besser ausgelastet und kostengünstiger zu betreiben. Virtualisierung ist die Grundlage für einen erheblichen Teil der Anwendungsentwicklung und -bereitstellung.

Virtuelle Maschinen

Wie der Name schon sagt, ermöglichen virtuelle Maschinen (VMs) die Virtualisierung einer gesamten Maschine (Server). Eine virtuelle Maschine emuliert die Hardwarekomponenten einer physischen Maschine wie CPU, Speicher, Netzwerkschnittstellenkarte, USB-Controller und Soundkarten. Sie können ein Gastbetriebssystem und mehrere Anwendungen in der virtuellen Umgebung ausführen. 

Virtuelle Maschinen haben Cloud-Technologien ermöglicht, und in Amazon Web Services (AWS) wird eine virtuelle Maschine als Instance bezeichnet. Diese Cloud-Instances gehören AWS und werden von AWS verwaltet und können über APIs verwendet werden.

Mehr über Cloud-Instances lesen »

Docker

Mit einer VM können Sie eine virtuelle Maschine auf beliebiger Hardware ausführen. Mit Docker können Sie eine Anwendung auf jedem Betriebssystem ausführen. Es verwendet isolierte User-Space-Instances, die als Container bekannt sind.

Docker-Container haben ihr eigenes Dateisystem, ihre eigene Abhängigkeitsstruktur, Prozesse und Netzwerkfunktionen. Die Anwendung verfügt über alles, was sie benötigt, innerhalb des Containers und kann überall ausgeführt werden. Die Docker-Container-Technologie verwendet direkt die zugrunde liegenden Kernelressourcen des Host-Betriebssystems. 

Was sind weitere Ähnlichkeiten zwischen Docker und virtuellen Maschinen?

Als Virtualisierungstechnologien weisen Docker und virtuelle Maschinen (VMs) gewisse Ähnlichkeiten auf.

Images

Docker-Container und virtuelle Maschinen werden beide aus Images erstellt. Jedes Image dient als Vorlage der virtualisierten Umgebung. Mit Images können Benutzer konsistente Umgebungen erstellen und gemeinsam nutzen, ohne sie jedes Mal konfigurieren zu müssen.

Ein Image spezifiziert alle Systemressourcen, die für die Ausführung von Anwendungen erforderlich sind. Beispielsweise erstellt ein VM-Image Betriebssystem-Backups, während das Docker-Container-Image ein Backup der Anwendungsumgebung erstellt.

Versioning

Sowohl Docker-Container-Images als auch VM-Images können versioniert werden, um Änderungen der Umgebungskonfiguration im Laufe der Zeit zu verfolgen.

Versionsverwaltung in Docker bezieht sich auf die Fähigkeit, Änderungen an Docker-Images im Laufe der Zeit zu verfolgen und zu verwalten. Es ermöglicht Entwicklern, den Überblick über verschiedene Versionen ihrer Anwendungen zu behalten, bei Bedarf auf frühere Versionen zurückzugreifen und verschiedene Versionen einer Anwendung gleichzeitig bereitzustellen. 

In ähnlicher Weise bezieht sich Versionsverwaltung in virtuellen Maschinen auf den Prozess der Verfolgung und Verwaltung von Änderungen am Image der virtuellen Maschine im Laufe der Zeit. Die Versionsverwaltung virtueller Maschinen verfolgt Änderungen – wie Updates und Patches – an der Konfiguration der virtuellen Hardware oder des Betriebssystems.

Portierbarkeit

Sowohl virtuelle Maschinen als auch Docker wurden entwickelt, um die Herausforderungen zu lösen, die mit der Entwicklung verschiedener Anwendungskonfigurationen für verschiedene Arten von zugrunde liegenden Architekturen verbunden sind. Trotz ihrer unterschiedlichen Herangehensweise an diese Herausforderungen sind sowohl Docker als auch VM-Images in hohem Maße über Architekturen hinweg übertragbar, ob vor Ort oder in der Cloud. 

Hauptunterschiede: Docker vs. virtuelle Maschine

Sowohl virtuelle Maschinen (VMs) als auch Docker bewältigen die Herausforderung, Anwendungen in verschiedenen Umgebungen auszuführen. Sie tun dies jedoch aus etwas anderen Gründen und mit unterschiedlichen Ansätzen.

Zielsetzung

Virtuelle Maschinen wurden ursprünglich konzipiert, um mehrere Betriebssysteme auf einer einzigen physischen Maschine ausführen zu können. Ziel ist es, Benutzern die Erstellung einer virtuellen Umgebung zu ermöglichen, die von der zugrunde liegenden Hardware isoliert ist. Virtuelle Maschinen abstrahieren Hardwaredetails, um die Ausführung von Anwendungen auf verschiedenen Hardwarearchitekturen zu erleichtern und Hardwareressourcen effizienter zu nutzen.

Docker wurde dagegen als leichtgewichtige und portable Lösung für die Paketierung und Ausführung von Anwendungen in einer isolierten und reproduzierbaren Umgebung entwickelt. Docker abstrahiert Betriebssystemdetails, um die Herausforderung der Bereitstellung von Anwendungen in verschiedenen Umgebungen wie Entwicklung, Test und Produktion zu bewältigen. Es ist mitunter schwierig, Updates der Softwareumgebung zu verwalten und die Konsistenz der Umgebung jederzeit aufrechtzuerhalten. Dies gilt insbesondere für Unternehmen, die Hunderte von Anwendungen ausführen oder Anwendungen in Hunderte von Microservices zerlegen. Docker löst dieses Problem durch Containerisierung. 

Endprodukt

Docker ist der Name der Open-Source-Container-Plattform, die der Firma Docker gehört und von ihr betrieben wird. Es gibt alternative Plattformen wie Podman, die jedoch weitaus weniger verbreitet sind; Docker stellt praktisch ein Synonym für Containerisierung dar. Der Container ist das Artefakt, der nutzbare Teil für den Endbenutzer.

Eine virtuelle Maschine selbst ist der nutzbare Teil für den Endbenutzer. Die Technologie ist keiner bestimmten Marke zugeordnet. Sie können VMs in On-Premises-Rechenzentren bereitstellen oder über APIs als verwalteten Cloud-Service auf sie zugreifen.

Architektur

Eine virtuelle Maschine führt ihren eigenen Kernel und ihr eigenes Host-Betriebssystem sowie Anwendungen und deren Abhängigkeiten wie Bibliotheken und andere Binärdateien aus. Ein Hypervisor koordiniert zwischen der Hardware (Hostcomputer oder Server) und der virtuellen Maschine. Er weist der virtuellen Maschine die bei der Instanziierung angegebenen physischen Hardwareressourcen zur ausschließlichen Verwendung zu. Auf einem einzigen leistungsstarken Server, der von einem einzigen Hypervisor verwaltet wird, können mehrere virtuelle Maschinen parallel existieren, wobei auf jeder virtuellen Maschine Hunderte von Anwendungen ausgeführt werden können.

Ein Docker-Container enthält nur seine Abhängigkeiten. Die Software Docker Engine unterstützt die Virtualisierung in Docker. Sie sorgt für die Koordination zwischen laufenden Containern und dem zugrunde liegenden Betriebssystem, unabhängig davon, ob es sich um eine physische oder virtuelle Maschine handelt.

Verwenden Sie Kubernetes für das erweiterte Virtualisierungsmanagement mit Docker. Weitere Informationen finden Sie unter Was ist der Unterschied zwischen Kubernetes und Docker?

Ressourcenfreigabe

Sowohl virtuelle Maschinen als auch Docker-Container verwenden Ressourcenmultiplexing oder die gemeinsame Nutzung von Ressourcen zwischen virtualisierten Instances.

Virtuelle Maschinen fordern im Voraus eine bestimmte Menge der Ressource von der Hardware an und belegen diese Menge kontinuierlich, solange die virtuelle Maschine läuft. 

Docker-Container hingegen nutzen Ressourcen bei Bedarf. Anstatt wie virtuelle Maschinen nach einer bestimmten Menge an physischer Hardwareressourcen zu fragen, fordern sie einfach die benötigten Ressourcen vom Betriebssystem-Kernel an. Mehrere Container verwenden dasselbe Betriebssystem. Docker-Container leiten die gemeinsame Nutzung von Ressourcen mit den Kernel-Leads ab und verbrauchen im Vergleich zu einer VM möglicherweise weniger Systemressourcen. 

Sicherheit

Da sich Docker-Container den Kernel mit dem Host-Betriebssystem teilen, sind sie aus Gründen des geringen Ressourcenverbrauchs gefährdet, wenn der Kernel Sicherheitslücken aufweist. Docker bietet darüber hinaus jedoch viele erweiterte Sicherheitskontrollen.

Andererseits bietet eine VM, auf der ein komplettes Betriebssystem läuft, eine zusätzliche Isolationsebene bei der Ausführung von Anwendungen. VMs bieten eine höhere Sicherheit, solange das Betriebssystem über strenge Sicherheitsmaßnahmen verfügt.

Wann Sie Docker im Vergleich zu einer virtueller Maschine verwenden sollten

Docker-Container laufen auf einer Linux-Architektur und benötigen Funktionen wie Namespaces und Kontrollgruppen (cgroups), die spezifisch für den Linux-Kernel sind. Entwickler führen die Docker-Plattform häufig auf Linux-basierten virtuellen Maschinen aus. Docker verpackt Anwendungscode in Container, die überall ausgeführt werden können. Umgebungsaktualisierungen werden nur einmal im Container durchgeführt. Sie müssen Ihre Anwendungsumgebung nicht aktualisieren. 

Sie können beispielsweise eine Instance in AWS hochfahren und sie sofort mit einem Amazon Machine Image (AMI) laden, das mit Docker vorkonfiguriert ist. 

 

Wenn Sie jedoch vor der spezifischen Entscheidung stehen, ob Sie entweder eine virtuelle Maschine (VM) oder Docker für die Bereitstellung von Anwendungen verwenden möchten, hängt dies von den Anforderungen an die Ausführung der Anwendung ab.

Wann sollte eine virtuelle Maschine verwendet werden?

Verwenden Sie am besten eine virtuelle Maschine, wenn Sie Anwendungen mit diesen Anforderungen ausführen: 

  • Betriebssystemspezifische Abhängigkeiten
  • Erhebliche Anforderungen an Hardwareressourcen
  • Die Notwendigkeit, verschiedene Steuerelemente in Betriebssystemen einzurichten
  • Legacy-Anwendungen, die nicht mehr auf modernen Betriebssystemen laufen
  • Verschiedene Betriebssystemanforderungen mit einer einzigen zugrunde liegenden physischen Infrastruktur verfügbar

Einsatzbereiche von Docker

Verwenden Sie Docker am besten, wenn Sie Anwendungen mit den folgenden Anforderungen ausführen: 

  • Geringere Ressourcenanforderungen für eine Microservice-Architektur
  • Eine verteilte physische Infrastrukturumgebung, einschließlich cloudbasierter Server
  • Kurze Bereitstellungszyklen (da Dockerfiles einfacher zu verwalten sind als VM-Konfigurationen)
  • Eine schnelle Skalierbarkeitsanforderung

Zusammenfassung der Unterschiede: Docker vs. VM

 

Docker-Container

VM

Wie lautet es?

Docker ist eine Softwareplattform zum Erstellen und Ausführen von Docker-Containern. Ein Docker-Container stellt eine Emulation einer User-Space-Instance dar, dem Teil des Betriebssystems, in dem Benutzerprozesse ausgeführt werden.

Eine Emulation einer physischen Maschine – einschließlich virtualisierter Hardware –, auf der ein Betriebssystem ausgeführt wird.

Virtualisierung

Der Container abstrahiert Betriebssystemdetails vom Anwendungscode.

Eine VM abstrahiert Hardwaredetails vom Anwendungscode.

Zielsetzung

Abstrahiert Hardwaredetails und erhöht die Hardware-Auslastung.

Verbessert das Management der Anwendungsumgebung und sorgt für Konsistenz in mehreren Umgebungen.

Verwaltet durch

Die Docker Engine vermittelt zwischen dem Betriebssystem und den Docker-Containern.

Der Hypervisor vermittelt zwischen der physischen Hardware der Maschine und den virtuellen Maschinen.

Architektur

Teilt Ressourcen mit dem zugrunde liegenden Host-Kernel.

Führt seinen eigenen Kernel und sein eigenes Betriebssystem aus.

Ressourcenfreigabe

On-Demand.

Ein fester Betrag, der in den Konfigurationsanforderungen eines VM-Images festgelegt ist.

Wie kann AWS Ihre Anforderungen an die Anwendungsbereitstellung unterstützen?

Amazon Web Services (AWS) bietet eine Reihe von Services, die speziell für virtuelle Maschinen (VMs) und Docker-Management entwickelt wurden:

  • Amazon Elastic Cloud Compute (Amazon EC2) bietet mehr als 600 verschiedene Arten sicherer, zuverlässiger und skalierbarer Instances. Durch das Laden einer Amazon Machine Image (AMI)-Vorlage können Sie innerhalb weniger Minuten einen vollständig spezifizierten Server für die Entwicklungs-, Test- oder Produktionsumgebung bereitstellen.
  • Amazon Elastic Container Service (Amazon ECS) ist ein vollständig verwalteter Service zur Container-Orchestrierung, der das Bereitstellen und Skalieren von containerisierten Anwendungen vereinfacht. Kunden können ihre Container-Instances für den Zugriff auf eine private Docker-Image-Registry in einer Virtual Private Cloud (VPC) oder einer Registry konfigurieren, auf die auch außerhalb einer VPC zugegriffen werden kann.
  • Mit Amazon Elastic Container Registry (Amazon ECR) können Sie Ihre Container einfach überall speichern, teilen und bereitstellen. Amazon ECR lässt sich in die Docker-Befehlszeilenschnittstelle (CLI) integrieren, um Ihre Entwicklungs- und Produktionsabläufe zu vereinfachen. Beispielsweise können Sie Ihre Container-Images mithilfe der Docker-CLI von Ihrem Entwicklungscomputer aus auf Amazon ECR übertragen. Und Amazon-Container-Orchestratoren können sie direkt für Produktionsbereitstellungen abrufen.
  • AWS Fargate ist ein Serverless-Service, mit dem Sie Container bereitstellen und verwalten können, ohne einen physischen Server oder virtuelle Maschinen verwalten zu müssen.

Starten Sie mit der Entwicklung von Ihren Anwendungen auf AWS, indem Sie noch heute ein Konto erstellen.