Container vs. Virtuellen Maschinen: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
|||
| Zeile 1: | Zeile 1: | ||
=Grundsätzliches= | =Grundsätzliches= | ||
* Container und virtuelle Maschinen (VMs) sind zwei | *Container und virtuelle Maschinen (VMs) sind die zwei gängigen Wege, Anwendungen isoliert auf gemeinsamer Hardware zu betreiben. | ||
* | *Beide trennen Anwendungen voneinander, nutzen Ressourcen besser aus und erleichtern die Skalierung. | ||
* | *Der entscheidende Unterschied: '''Eine VM bringt einen eigenen Kernel mit, ein Container nutzt den Kernel des Hosts.''' | ||
=Virtuelle Maschinen (VMs)= | =Virtuelle Maschinen (VMs)= | ||
* Eine | *Eine VM ist ein vollständiger virtueller Rechner mit eigenem Betriebssystem und eigenem Kernel. | ||
* | *Der Hypervisor stellt ihr emulierte Hardware bereit (Festplatte, Netzwerkkarte, Grafik). Die CPU wird per VT-x/AMD-V durchgereicht. | ||
* | *Auf einem Host laufen so mehrere, auch unterschiedliche Betriebssysteme nebeneinander. | ||
;Starke Isolation | |||
*Jede VM hat ihren eigenen Kernel. Ein Absturz oder Angriff in einer VM betrifft die anderen in der Regel nicht. | |||
; | ;Höherer Ressourcenbedarf | ||
* Jede VM | *Jede VM braucht ein komplettes Betriebssystem mit eigenem RAM- und Plattenbedarf. | ||
;Langsamerer Start | |||
; | *Eine VM bootet ein vollständiges Betriebssystem, das dauert Sekunden bis Minuten. | ||
* | ;Hohe Flexibilität | ||
; | *Beliebige Betriebssysteme auf demselben Host, z. B. Windows und Linux nebeneinander. | ||
* | |||
; | |||
* | |||
=Container= | =Container= | ||
* Container | *Ein Container ist eine isolierte Umgebung für Prozesse auf dem Host. Es gibt keinen eigenen Kernel. | ||
* Container teilen sich den Kernel | *Die Isolation kommt vom Linux-Kernel selbst: | ||
**'''Namespaces''' trennen, was ein Prozess sieht (Prozesse, Netzwerk, Dateisystem, Benutzer). | |||
**'''cgroups''' begrenzen, was ein Prozess verbraucht (CPU, RAM, I/O). | |||
*Ein Container bringt nur die Anwendung und ihre Bibliotheken mit, z. B. als Image. | |||
;Geringer Ressourcenbedarf | |||
*Kein zweites Betriebssystem, kein zweiter Kernel. Ein Container ist im Kern ein normaler Prozess. | |||
;Schneller Start | |||
*Ein Container startet in Sekundenbruchteilen bis Sekunden, weil nichts gebootet werden muss. | |||
;Geringere Isolation | |||
*Alle Container teilen sich den Host-Kernel. | |||
*Eine Kernel-Lücke oder ein Kernel-Absturz betrifft alle Container auf dem Host. | |||
;Hohe Portabilität, mit Einschränkung | |||
*Ein Image läuft auf jedem Host mit Container-Runtime (Docker, Podman, containerd). | |||
*Voraussetzung: passender Kernel und gleiche CPU-Architektur. Linux-Container brauchen einen Linux-Kernel. Unter Windows und macOS läuft dafür im Hintergrund eine VM. | |||
*Unterschiedliche Distributionen sind möglich (z. B. ein Debian-Container auf einem Rocky-Host), aber immer mit dem Kernel des Hosts. | |||
== | ==Anwendungs- und System-Container== | ||
*'''Anwendungs-Container''' (Docker, Podman): ein Dienst pro Container, z. B. ein Webserver. | |||
* Container | *'''System-Container''' (LXC, in Proxmox „CT“): ein komplettes Linux-Userland mit init-System, verhält sich fast wie eine VM, nutzt aber den Kernel des Hosts. | ||
* | |||
=Vergleich= | =Vergleich= | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Merkmal !! Virtuelle Maschinen (VMs) !! Container | ! Merkmal !! Virtuelle Maschinen (VMs) !! Container | ||
|- | |- | ||
| Isolation || | | Kernel || Eigener Kernel pro VM || Kernel des Hosts | ||
|- | |||
| Isolation || Stark (Hypervisor, CPU-Unterstützung) || Geringer (Namespaces, cgroups) | |||
|- | |- | ||
| Ressourcenbedarf || Höher || Geringer | | Ressourcenbedarf || Höher || Geringer | ||
|- | |- | ||
| | | Start || Sekunden bis Minuten || Sekundenbruchteile bis Sekunden | ||
|- | |||
| Betriebssysteme || Beliebig (Windows, Linux, BSD …) || Nur passend zum Host-Kernel | |||
|- | |- | ||
| | | Portabilität || Weniger portabel (große Images) || Sehr portabel (kleine Images) | ||
|- | |- | ||
| | | Beispiele || KVM/QEMU, VirtualBox, VMware, Proxmox VM || Docker, Podman, LXC, Proxmox CT | ||
|} | |} | ||
| Zeile 57: | Zeile 63: | ||
=Realität= | =Realität= | ||
*In der Praxis kombiniert man beides: Container laufen sehr oft in VMs, und die laufen auf einem Hypervisor. | |||
[[Datei:Vm-container.png]] | [[Datei:Vm-container.png]] | ||
=Fazit= | =Fazit= | ||
*VMs bieten starke Isolation und freie Wahl des Betriebssystems, brauchen aber mehr Ressourcen und starten langsamer. | |||
* VMs bieten | *Container sind leicht, schnell und portabel, teilen sich aber den Kernel des Hosts und sind dadurch schwächer isoliert. | ||
* Container sind | *Die Wahl hängt ab von Sicherheitsanforderungen, benötigtem Betriebssystem, Ressourcen und Skalierung. | ||
* Die Wahl | |||
=Präsentation= | =Präsentation= | ||
*https://hedgedoc.xinux.net/p/Ti9s55SOP#/ | *https://hedgedoc.xinux.net/p/Ti9s55SOP#/ | ||
[[Kategorie:Virtualisierung]] | [[Kategorie:Virtualisierung]] | ||
Aktuelle Version vom 11. Oktober 2026, 12:05 Uhr
Grundsätzliches
- Container und virtuelle Maschinen (VMs) sind die zwei gängigen Wege, Anwendungen isoliert auf gemeinsamer Hardware zu betreiben.
- Beide trennen Anwendungen voneinander, nutzen Ressourcen besser aus und erleichtern die Skalierung.
- Der entscheidende Unterschied: Eine VM bringt einen eigenen Kernel mit, ein Container nutzt den Kernel des Hosts.
Virtuelle Maschinen (VMs)
- Eine VM ist ein vollständiger virtueller Rechner mit eigenem Betriebssystem und eigenem Kernel.
- Der Hypervisor stellt ihr emulierte Hardware bereit (Festplatte, Netzwerkkarte, Grafik). Die CPU wird per VT-x/AMD-V durchgereicht.
- Auf einem Host laufen so mehrere, auch unterschiedliche Betriebssysteme nebeneinander.
- Starke Isolation
- Jede VM hat ihren eigenen Kernel. Ein Absturz oder Angriff in einer VM betrifft die anderen in der Regel nicht.
- Höherer Ressourcenbedarf
- Jede VM braucht ein komplettes Betriebssystem mit eigenem RAM- und Plattenbedarf.
- Langsamerer Start
- Eine VM bootet ein vollständiges Betriebssystem, das dauert Sekunden bis Minuten.
- Hohe Flexibilität
- Beliebige Betriebssysteme auf demselben Host, z. B. Windows und Linux nebeneinander.
Container
- Ein Container ist eine isolierte Umgebung für Prozesse auf dem Host. Es gibt keinen eigenen Kernel.
- Die Isolation kommt vom Linux-Kernel selbst:
- Namespaces trennen, was ein Prozess sieht (Prozesse, Netzwerk, Dateisystem, Benutzer).
- cgroups begrenzen, was ein Prozess verbraucht (CPU, RAM, I/O).
- Ein Container bringt nur die Anwendung und ihre Bibliotheken mit, z. B. als Image.
- Geringer Ressourcenbedarf
- Kein zweites Betriebssystem, kein zweiter Kernel. Ein Container ist im Kern ein normaler Prozess.
- Schneller Start
- Ein Container startet in Sekundenbruchteilen bis Sekunden, weil nichts gebootet werden muss.
- Geringere Isolation
- Alle Container teilen sich den Host-Kernel.
- Eine Kernel-Lücke oder ein Kernel-Absturz betrifft alle Container auf dem Host.
- Hohe Portabilität, mit Einschränkung
- Ein Image läuft auf jedem Host mit Container-Runtime (Docker, Podman, containerd).
- Voraussetzung: passender Kernel und gleiche CPU-Architektur. Linux-Container brauchen einen Linux-Kernel. Unter Windows und macOS läuft dafür im Hintergrund eine VM.
- Unterschiedliche Distributionen sind möglich (z. B. ein Debian-Container auf einem Rocky-Host), aber immer mit dem Kernel des Hosts.
Anwendungs- und System-Container
- Anwendungs-Container (Docker, Podman): ein Dienst pro Container, z. B. ein Webserver.
- System-Container (LXC, in Proxmox „CT“): ein komplettes Linux-Userland mit init-System, verhält sich fast wie eine VM, nutzt aber den Kernel des Hosts.
Vergleich
| Merkmal | Virtuelle Maschinen (VMs) | Container |
|---|---|---|
| Kernel | Eigener Kernel pro VM | Kernel des Hosts |
| Isolation | Stark (Hypervisor, CPU-Unterstützung) | Geringer (Namespaces, cgroups) |
| Ressourcenbedarf | Höher | Geringer |
| Start | Sekunden bis Minuten | Sekundenbruchteile bis Sekunden |
| Betriebssysteme | Beliebig (Windows, Linux, BSD …) | Nur passend zum Host-Kernel |
| Portabilität | Weniger portabel (große Images) | Sehr portabel (kleine Images) |
| Beispiele | KVM/QEMU, VirtualBox, VMware, Proxmox VM | Docker, Podman, LXC, Proxmox CT |
Schaubild
Realität
- In der Praxis kombiniert man beides: Container laufen sehr oft in VMs, und die laufen auf einem Hypervisor.
Fazit
- VMs bieten starke Isolation und freie Wahl des Betriebssystems, brauchen aber mehr Ressourcen und starten langsamer.
- Container sind leicht, schnell und portabel, teilen sich aber den Kernel des Hosts und sind dadurch schwächer isoliert.
- Die Wahl hängt ab von Sicherheitsanforderungen, benötigtem Betriebssystem, Ressourcen und Skalierung.

