
Was sind die Hauptunterschiede zwischen Virtualisierung und Containerisierung und wofür werden die einzelnen Technologien verwendet?
Virtualisierung (VMs). Eine virtuelle Maschine ist eine Abstraktion physischer Hardware – sie verwandelt einen Server in mehrere. Ein Hypervisor sitzt zwischen dem Host und den VMs und bündelt CPU, Arbeitsspeicher und Speicher. Jede VM enthält eine vollständige Kopie eines Gastbetriebssystems sowie die Anwendung und alle Bibliotheken. Der Hypervisor (VMM) erzwingt die Isolation und seine Grenze wird hardwareunterstützt durch CPU-Virtualisierungserweiterungen (Intel VT-x / AMD-V).
Es gibt zwei Arten von Hypervisoren:
- Typ 1 (Bare-Metal): läuft direkt auf der Hardware; Saubere Beispiele sind VMware ESXi/vSphere, Microsoft Hyper-V und Xen. KVM ist ein Hybridfall: ein Linux-Kernelmodul, das den Kernel in einen Hypervisor vom Typ 1 verwandelt, während auf dem Host weiterhin normale Prozesse ausgeführt werden.
- Typ 2 (gehostet): läuft als Anwendung auf einem herkömmlichen Betriebssystem (VirtualBox, VMware Workstation); Geeignet für persönliche Maschinen.
Containerisierung. Ein Container verpackt Code und alle seine Abhängigkeiten (Laufzeit, Bibliotheken, Einstellungen) und virtualisiert das Betriebssystem anstelle der Hardware. Container teilen sich den Kernel des Host-Betriebssystems und werden als isolierte Prozesse im Benutzerbereich ausgeführt. Unter Linux werden hierfür Namespaces (Isolation) und Cgroups (Ressourcenbuchhaltung und -limits) verwendet, die durch Capabilities, Seccomp, MAC (SELinux/AppArmor), Benutzernamespaces und Rootless-Modus weiter gestärkt werden. Kernel-Sharing impliziert Kompatibilität mit der Betriebssystemfamilie: Linux-Container benötigen einen Linux-Kernel, sodass Docker Desktop unter Windows/macOS leise eine leichte Linux-VM ausführt. Docker hat Container populär gemacht, aber das Format ist durch OCI standardisiert; Es gibt auch andere Laufzeiten – Containerd, CRI-O, Podman.
Hauptunterschiede:
- Größe: Container-Images haben typischerweise ein paar MB bis Hunderte von MB; VMs sind GBs (anschauliche Größenordnungen, keine festen Zahlen).
- Startup: Container starten in Sekunden/Millisekunden; VMs müssen ein vollständiges Betriebssystem starten.
- Overhead: Container benötigen kein separates Betriebssystem pro App – höhere Dichte, niedrigere Lizenzkosten.
- Isolation/Sicherheit: VMs bieten eine stärkere, hardwarebasierte Isolation; Container bieten eine schwächere, softwarebasierte Isolierung (Container-Escape-Risiko aus dem gemeinsam genutzten Kernel). Ein Mittelweg sind Sandbox-Laufzeiten (gVisor, Kata Containers, Firecracker), die einer Isolation auf VM-Ebene nahekommen.
Wofür jeder verwendet wird:
- VMs: Ausführung unterschiedlicher Betriebssysteme auf einem Server, ressourcenintensive oder monolithische Arbeitslasten und starke Isolation (Mehrmandantenfähigkeit, Legacy-Apps).
- Container: Cloud-native Entwicklung, Microservices, CI/CD, Portabilität und schnelle horizontale Skalierung (orchestriert durch Kubernetes).
In der Praxis ergänzen sich beide: Container werden oft in VMs ausgeführt, um agile Bereitstellung mit starker Isolation zu kombinieren.
