Eine der häufigsten Fragen, die zu Docker gestellt werden, ist die nach dem Unterschied zu VM (virtuelle Maschine).
Wenn es um Cloud-Infrastrukturen geht, ist die virtuelle Maschine wegen ihrer vielen Vorteile der Standard schlechthin. Aber was wäre, wenn es eine Alternative zu einer virtuellen Maschine gäbe, die leichter, wirtschaftlicher und skalierbarer ist? Das ist genau das, was Docker ist.
Docker ist eine containerbasierte Technologie, mit der Sie verteilte Anwendungen entwickeln können. In diesem Blogbeitrag werde ich die Unterschiede zwischen virtuellen Maschinen und Docker-Containern erläutern.
Was ist eine virtuelle Maschine?
Eine virtuelle Maschine ist ein System, das sich genau wie ein Computer verhält.
Vereinfacht ausgedrückt, ermöglicht sie die Ausführung von scheinbar vielen separaten Computern auf einer Hardware, die ein Computer ist. Jede virtuelle Maschine benötigt ihr eigenes Betriebssystem, und dann wird die Hardware virtualisiert.
Was ist Docker?
Docker ist ein Tool, das mit Hilfe von Containern die Erstellung, Bereitstellung und Ausführung von Anwendungen erheblich vereinfacht. Es bindet eine Anwendung und ihre Abhängigkeiten in einen Container ein.
Docker vs. VM
Jetzt werde ich Ihnen die wesentlichen Unterschiede zwischen Docker-Containern und virtuellen Maschinen erklären. Die wichtigsten Unterschiede sind die Unterstützung von Betriebssystemen, Sicherheit, Portabilität und Leistung.
Lassen Sie uns also jeden dieser Begriffe einzeln besprechen.
Unterstützung des Betriebssystems
Die Betriebssystemunterstützung von virtuellen Maschinen und Docker-Containern ist sehr unterschiedlich. In der obigen Abbildung können Sie sehen, dass jede virtuelle Maschine ihr Gastbetriebssystem über dem Hostbetriebssystem hat, was virtuelle Maschinen schwer macht. Docker-Container hingegen teilen sich das Host-Betriebssystem, weshalb sie leichtgewichtig sind.
Die gemeinsame Nutzung des Host-Betriebssystems durch die Container macht sie sehr leicht und sorgt dafür, dass sie in nur wenigen Sekunden hochfahren. Daher ist der Aufwand für die Verwaltung des Containersystems im Vergleich zu virtuellen Maschinen sehr gering.
Docker-Container eignen sich für Situationen, in denen Sie mehrere Anwendungen über einen einzigen Betriebssystem-Kernel ausführen möchten. Wenn Sie jedoch Anwendungen oder Server haben, die auf verschiedenen Betriebssystemen laufen müssen, dann sind virtuelle Maschinen erforderlich.
Sicherheit
Die virtuelle Maschine hat kein gemeinsames Betriebssystem, und es gibt eine starke Isolierung im Host-Kernel. Daher sind sie im Vergleich zu Containern sicherer. Ein Container birgt viele Sicherheitsrisiken und Schwachstellen, da die Container einen gemeinsamen Host-Kernel haben.
Da Docker-Ressourcen gemeinsam genutzt werden und keinen Namensraum haben, kann ein Angreifer alle Container in einem Cluster ausnutzen, wenn er Zugriff auf auch nur einen Container erhält. In einer virtuellen Maschine haben Sie keinen direkten Zugriff auf die Ressourcen, und der Hypervisor ist dazu da, die Nutzung der Ressourcen in einer VM zu beschränken.
Portabilität
Docker-Container sind leicht portierbar, da sie keine separaten Betriebssysteme haben. Ein Container kann auf ein anderes Betriebssystem portiert werden und sofort gestartet werden. Virtuelle Maschinen hingegen haben ein separates Betriebssystem, so dass die Portierung einer virtuellen Maschine im Vergleich zu Containern schwierig ist und aufgrund ihrer Größe auch viel Zeit in Anspruch nimmt.
Für Entwicklungszwecke, bei denen die Anwendungen auf verschiedenen Plattformen entwickelt und getestet werden müssen, sind Docker-Container die ideale Wahl.
Leistung
Ein Vergleich zwischen virtuellen Maschinen und Docker-Containern wäre nicht fair, da beide für unterschiedliche Zwecke eingesetzt werden. Aber die leichtgewichtige Architektur von Docker, seine weniger ressourcenintensive Funktion macht es zu einer besseren Wahl als eine virtuelle Maschine. So können Container im Vergleich zu virtuellen Maschinen sehr schnell gestartet werden, und die Ressourcennutzung variiert je nach Last oder Datenverkehr in ihnen.
Anders als bei virtuellen Maschinen müssen Containern keine Ressourcen dauerhaft zugewiesen werden. Auch die Skalierung und Duplizierung von Containern ist im Vergleich zu virtuellen Maschinen eine einfache Aufgabe, da kein Betriebssystem installiert werden muss.
Conclusion
Im Folgenden finden Sie eine Tabelle mit den Unterschieden zwischen virtuellen Maschinen und Docker-Containern.
Virtuelle Maschine | Docker-Container |
Prozessisolierung auf Hardware-Ebene | Prozessisolierung auf Betriebssystemebene |
Jede VM hat ein eigenes Betriebssystem | Jeder Container kann das Betriebssystem gemeinsam nutzen |
Startet in Minuten | Startet in Sekunden |
VMs haben eine Größe von wenigen GBs | Container sind leichtgewichtig (KBs/MBs) |
Vorgefertigte VMs sind schwer zu finden | Vorgefertigte Docker-Container sind leicht verfügbar |
VMs können leicht auf einen neuen Host übertragen werden | Container werden eher zerstört und neu erstellt als verschoben |
Die Erstellung einer VM dauert relativ lange | Container können in Sekundenschnelle erstellt werden |
Mehr Ressourcenverbrauch | Weniger Ressourcennutzung |