Container vs. Virtual Machines

Erfahre mehr über die Unterschiede zwischen Containern und Virtual Machines (VMs), die jeweils beliebtesten Anbietern dafür und wie sie zusammen verwendet werden können.

Ian Buchanan Ian Buchanan

Container und VMs sind sehr ähnliche Technologien zur Ressourcenvirtualisierung. Virtualisierung ist ein Prozess, bei dem eine Systemressource wie RAM, CPU, Festplatte oder Netzwerk virtuell dargestellt und als mehrere Ressourcen abgebildet wird. Das Hauptunterscheidungsmerkmal zwischen Containern und VMs besteht darin, dass VMs den gesamten Rechner bis hinunter zu den Hardwareschichten virtualisieren, während bei Containern die Virtualisierung lediglich für die Softwareschichten über der Betriebssystemebene stattfindet.

Ein Container, der die Unterschiede zwischen Virtual Machines und Containern zeigt

Was ist ein Container?

Container sind leichtgewichtige Softwarepakete, die alle Abhängigkeiten enthalten, die zur Ausführung der enthaltenen Softwareanwendung erforderlich sind. Diese Abhängigkeiten umfassen Dinge wie Systembibliotheken, externe Codepakete von Drittanbietern und andere Anwendungen auf Betriebssystemebene. Die in einem Container enthaltenen Abhängigkeiten bestehen in Stack-Ebenen, die dem Betriebssystem übergeordnet sind.

Vorteile

  • Iterationsgeschwindigkeit
    Da Container leichtgewichtig sind und nur Software auf hoher Ebene enthalten, können sie sehr schnell geändert und iteriert werden.
  • Robustes Ökosystem
    Die meisten Container-Laufzeitsysteme bieten ein gehostetes öffentliches Repository mit vorgefertigten Containern. Diese Container-Repositorys enthalten viele gängige Softwareanwendungen wie Datenbanken oder Messaging-Systeme und können sofort heruntergeladen und ausgeführt werden, wodurch Entwicklerteams Zeit sparen.

Nachteile

  • Geteilte Host-Exploits
    Container haben alle das gleiche zugrunde liegende Hardwaresystem unterhalb der Betriebssystemschicht. Es ist möglich, dass ein Exploit in einem Container aus dem Container ausbricht und die gemeinsam genutzte Hardware beeinträchtigt. Die beliebtesten Container-Laufzeiten verfügen über öffentliche Repositorys mit vorgefertigten Containern. Es besteht ein Sicherheitsrisiko bei der Verwendung eines dieser öffentlichen Images, da sie Exploits enthalten können oder anfällig für Angriffe sind.

Beliebte Container-Anbieter

  • Docker
    Docker ist die beliebteste und am weitesten verbreitete Container-Laufzeit. Docker Hub ist ein riesiges öffentliches Repository für beliebte containerisierte Softwareanwendungen. Container auf Docker Hub können sofort heruntergeladen und für eine lokale Docker-Laufzeit bereitgestellt werden.
  • rkt
    rkt, ausgesprochen "Rocket", ist ein auf Sicherheit ausgerichtetes Container-System. rkt-Container erlauben keine unsicheren Container-Funktionen, es sei denn, ein Benutzer deaktiviert Sicherheitsfunktionen explizit. rkt-Container zielen darauf ab, die zugrunde liegenden Sicherheitsprobleme anderer Container-Laufzeitsysteme durch Exploit-Kreuzkontaminationen anzugehen.
  • Linux-Container - LXC
    LXC ist eine Komponente eines Open-Source-Linux-Container-Laufzeitsystems. LXC wird verwendet, um Prozesse auf Betriebssystemebene voneinander zu isolieren. Docker verwendet übrigens LXC hinter den Kulissen. Linux-Container zielen darauf ab, eine anbieterneutrale Open-Source-Container-Laufzeit anzubieten.
  • CRI-O
    CRI-O ist ein aufkommender Open-Source-Container-Runtime-Standard, der von vielen Unternehmen in Zusammenarbeit entwickelt wird. Die CRI-O-Spezifikation ist für das Kubernetes-Container-Managementsystem optimiert.

Was ist eine VM?

VMs sind schwere Softwarepakete, die eine vollständige Emulation von Hardwaregeräten auf niedriger Ebene wie CPU, Disk und Netzwerkgeräte ermöglichen. VMs können auch einen ergänzenden Software-Stack enthalten, der auf der emulierten Hardware ausgeführt wird. Diese Hardware- und Softwarepakete ergeben zusammen einen voll funktionsfähigen Snapshot eines Computersystems.

Vorteile

  • Vollständige Isolationssicherheit
    VMs laufen isoliert als komplett eigenständiges System. Dies bedeutet, dass VMs immun gegen Exploits oder Interferenzen durch andere VMs auf einem gemeinsam genutzten Host sind. Eine einzelne VM kann immer noch Opfer eines Exploits werden, ist jedoch isoliert und kann keine anderen benachbarten VMs kontaminieren.
  • Interaktive Entwicklung
    Container sind in der Regel statische Definitionen der erwarteten Abhängigkeiten und Konfigurationen, die zum Ausführen des Containers erforderlich sind. VMs sind dynamischer und können interaktiv entwickelt werden. Sobald die grundlegende Hardwaredefinition für eine VM festgelegt wurde, kann die VM als Bare-Bones-Computer behandelt werden. Software kann manuell auf der VM installiert werden und es kann ein Snapshot der VM erstellt werden, um den aktuellen Konfigurationsstatus zu erfassen. Die VM-Snapshots können verwendet werden, um die VM auf diesen Zeitpunkt wiederherzustellen oder zusätzliche VMs mit dieser Konfiguration zu starten.

Nachteile

  • Iterationsgeschwindigkeit
    VMs sind zeitaufwendig zu erstellen und zu regenerieren, da sie den vollständigen Stack eines Systems umfassen. Bei allen Änderungen an einem VM-Snapshot können Regeneration und Validierung des erwarteten Verhaltens viel Zeit in Anspruch nehmen.
  • Kosten für Speichergröße
    VMs können viel Speicherplatz beanspruchen. Sie können schnell mehrere Gigabyte groß werden. Dies kann zu Problemen mit dem Speicherplatz des VMs-Host-Computers führen.

Beliebte VM-Anbieter

  • Virtualbox
    Virtualbox ist ein kostenloses Open-Source-Emulationssystem für x86-Architektur im Besitz von Oracle. VirtualBox ist eine der beliebtesten und etabliertesten VM-Plattformen mit einem Ökosystem ergänzender Tools zur Unterstützung bei der Entwicklung und Verteilung von VM-Images.
  • VMware
    VMware ist ein börsennotiertes Unternehmen, das sein Geschäft auf einer der ersten x86-Hardware-Virtualisierungstechnologien aufgebaut hat. VMware wird in einem Hypervisor geliefert, bei dem es sich um ein Dienstprogramm handelt, das mehrere VMs bereitstellt und verwaltet. VMware verfügt über eine robuste Benutzeroberfläche für die Verwaltung von VMs und ist für Unternehmen eine großartige VM-Option mit Support.
  • QEMU
    QEMU ist die robusteste VM-Option für Hardware-Emulation. Es unterstützt jede generische Hardwarearchitektur. QEMU ist ein Dienstprogramm, das ausschließlich über eine Befehlszeile bedient wird und keine grafische Benutzeroberfläche für die Konfiguration oder Ausführung bietet. Dieser Kompromiss macht QEMU zu einer der schnellsten VM-Optionen.

Welche Option ist besser für dich?

Wenn du bestimmte Hardwareanforderungen für dein Projekt hast oder auf einer bestimmten Hardwareplattform entwickelst, aber auf eine andere wie Windows abzielst, z. B. Windows und MacOS, musst du eine VM einsetzen. Die meisten anderen ausschließlichen Softwareanforderungen können durch die Verwendung von Containern erfüllt werden.

Wie kann ich Container und VMs zusammen verwenden?

Es ist durchaus möglich, Container und VMs zusammen zu verwenden, auch wenn die praktischen Anwendungsfälle eher begrenzt sind. Es kann eine VM erstellt werden, die eine eindeutige Hardwarekonfiguration emuliert. In der Hardware dieser VM kann dann ein Betriebssystem installiert werden. Sobald die VM funktionsfähig ist und das Betriebssystem bootet, kann eine Container-Laufzeit auf dem Betriebssystem installiert werden. Nun haben wir ein funktionales Computersystem mit emulierter Hardware, auf der wir Container installieren können.

Praktischen Nutzen hat diese Konfiguration beispielsweise für das Experimentieren mit System-on-Chip-Deployments. Ein gängiges System-on-Chip-Computer wie Raspberry Pi oder BeagleBone Entwicklungs-Boards kann als VM emuliert werden, um mit laufenden Containern auf ihnen zu experimentieren, bevor auf der eigentlichen Hardware getestet wird.

Aber die meiste Zeit werden deine Bedürfnisse wahrscheinlich von einer der beiden Lösungen abgedeckt. Bei der Entscheidung zwischen Containern oder VMs für deine Virtualisierungsanforderungen solltest du vor allem deine Ressourcenanforderungen kennen und wissen, welche Kompromisse du bereit bist, einzugehen.