Confluencer
Active member
Da sich hier in diesem Forumsbereich bisher wenig getan hat, poste ich hier mal eine überarbeitete Variante eines alten Beitrags von mir aus einem anderen Forum.
Aus meiner Sicht sind dies die wesentliche Punkte die VM's bzw. Container ausmachen und einige Vor-/Nachteile.
Bei einer VM wird ein vollständiger Computer virtualisiert:
Bei einem Container wird lediglich eine Anwendung virtualisiert:
Auf Windows Server bzw. Docker Desktop for Windows können natürlich auch Windows Container betrieben werden - allerdings nur Backend-Anwendungen, Windows Anwendungen mit UI sind nicht lauffähig. Ein Mischbetrieb von Windows- und Linux-Container ist dabei nicht möglich. Windows-Container können nur auf Windows-Systemen betrieben werden.
Aus meiner Sicht sind dies die wesentliche Punkte die VM's bzw. Container ausmachen und einige Vor-/Nachteile.
Bei einer VM wird ein vollständiger Computer virtualisiert:
- Eine VM läuft auf emulierter Hardware
- Eine VM hat sein eigenes BIOS
- Eine VM hat ein vollständiges OS mit eigenem Kernel (ineffizienter als Container: kostet RAM, CPU-Zeit und Plattenplatz)
- Eine VM läuft vollständig isoliert und verhält sich wie ein eigenständiges System
- Eine VM hat relativ lange Startzeiten, da erst das OS, Startprozesse und dann die Anwendungen gestartet werden müssen
- Das OS und die Anwendungen in einer VM müssen gepatched und aktuell gehalten werden
- In jedem OS jeder VM laufen alle für das OS notwendigen Prozesse und belegen jeweils ihre eigenen Ressourcen (Ineffizienter als Container: kostet RAM und CPU-Zeit)
- Hardwarezugriffe (jeder Zugriff auf die Festplatte, Bildschirm, durchgereichtes Gerät) werden durch den Hypervisor abstrahiert und müssen aufwändig zwischen Wirt und Gast-VMs synchronisiert werden (Ineffizienter als Container: kostet CPU-Zeit)
- Eine VM bietet ein starke Isolation gegenüber dem Host-System (stärker als Container)
- Man kann sein gesamtes Wissen über ein OS mitnehmen und nahtlos in die VM-Welt übertragen
- Kann sich nahtlos in das lokale Netzwerk ohne Einschränkungen einfügen
- Lange Startzeit
- Ressourcenverschwendung im Vergleich zum Container (RAM, CPU-Zeit und Plattenplatz)
- Die Daten für Anwendungen können quer über die VM verteilt sein
- Werden mehrere Anwendungen in einer VM installiert, so sind diese im Gegensatz zu Containern nicht gegeneinander isoliert
Bei einem Container wird lediglich eine Anwendung virtualisiert:
- Ein Container wird über Linux-Boardmittel isoliert, ist aber kein eigenständiges System - es ist "nur" ein Isolierter Prozess
- Ein Container der im priviliged Mode gestartet wird, hat nur schwache Isolation - ist dabei aber nicht unsicherer als den Prozess direkt auf dem Host zu starten.
- Ein Container verwendet den Kernel des Wirtssystems
- Ein Container basiert meist auf einem minimalen OS-Basis-Image (dies kann ein anderes sein als das des Wirts und für jeden Container anders sein), das eher dazu dient in gewohntem Umfeld für die Kernanwendung notwendige Abhängigkeiten bereitzustellen, ist aber kein vollständiges OS - es wird nicht gebootet und es werden keine OS-Startskripte gestartet
- Ein Container wird nicht gepatched (technisch möglich, aber sinnfrei) - stattdessen sollt man eher ein neues Image mit den Patches bauen, bzw. herunterladen
- In jedem Container laufen nur die Prozesse, die für den Betrieb der Kernanwendung notwendig sind (effizienter als VM: spart RAM und CPU-Zeit)
- Hardwarezugriffe werden direkt von dem Wirts-Kernel abgewickelt - (effizienter als VM: spart CPU-Zeit)
- Sehr effizienter Umgang mit Ressourcen - kaum Mehrverbrauch im Vergleich zum direkten Start eines Prozesses auf dem Wirtssystem
- Kapselung der Anwendungen - dadurch das man Verzeichnisse für Volume Mappings selber vorgibt weiss man IMMER wo welche Daten liegen
- Schnelle Startzeiten (es werden ja nur die für die Hauptanwendung notwendigen Prozesse gestartet)
- Wissen über den Umgang mit Linux und Bash kann nahtlos übernommen werden und ist von Vorteil, wenn man eigene Docker Images bauen möchte
- Man muss sich erst in die "Docker-Denkweise" einarbeiten - neues Wissen ist aufzubauen
- Nicht alles lässt sich sinnvoll in Containern betreiben
- Per Default ist ein Container nicht in das lokale Netzwerk eingebunden, sondern benötigt Port-Mapping zwischen Host und Container. Kann über macvlan/ipvlan in das lokale Netzwerk eingebunden werden, unterliegt dann aber der Kernel-Einschränkung, dass das macvlan/ipvlan Interface im Container nicht direkt mit der Host-IP kommunizieren darf
--device
auch direkt an den Container durchgereicht werden kann. Wenn man natürlich eine Windows-Anwendung oder ein besondere Unix/Linux Variante einsetzen möchte die es nicht als Basis-Image gibt, führt kein Weg an einer VM vorbei!Auf Windows Server bzw. Docker Desktop for Windows können natürlich auch Windows Container betrieben werden - allerdings nur Backend-Anwendungen, Windows Anwendungen mit UI sind nicht lauffähig. Ein Mischbetrieb von Windows- und Linux-Container ist dabei nicht möglich. Windows-Container können nur auf Windows-Systemen betrieben werden.
Zuletzt bearbeitet: