Es muss nicht immer Anwendungsvirtualisierung sein Virtuelle Maschinen als Alternative zum Container
Anbieter zum Thema
Alle Welt redet von Containern. Doch die gute, alte virtuelle Maschine kann in manchen Anwendungsszenarien durchaus ihre Vorteile haben. Deshalb sollten beide Lösungen gegeneinander abgewogen werden.

Container, ganz egal ob Docker, Kubernetes oder Linux-Containers sind in der Softwareentwicklung kaum noch wegzudenken. Kein Wunder, liefern sie doch schlanke Laufzeitpakete, um Anwendungen schlank, portabel und skalierbar zu halten, ohne auf bestimmte Basissysteme angewiesen zu sein.
Container tragen nicht umsonst diesen Namen: Gestapelt auf dem Deck des Frachters „Container-Engine“ können sie problemlos auf ein anderes Schiff umgeladen, per USB-Stick oder Internet „verfrachtet“, aufgestockt oder irgendwo gelagert werden – wie echte Container eben. Der Preis für diese Flexibilität ist der Verzicht auf eigene Trägersysteme. Genau hier kommen Virtuelle Maschinen ins Spiel.
Virtuelle Maschinen: Der Rechner im Rechner
Virtuelle Maschinen mit Programmen wie VMware, Parallels, VirtualBox oder Windows Hyper-V bringen nämlich vollständiges Rüstzeug mit. Ein vollwertiges Betriebssystem läuft hier auf einem vollwertigen virtuellen PC, der mittels Hypervisor und Virtualization Software auf einem Gastgeber-System arbeitet, komplett mit CPU, RAM, Grafik- und Netzwerkadaptern sowie Schnittstellen.
Das bedeutet im Umkehrschluss viel Ballast. Virtuelle Maschinen sind je nach Betriebssystem-Basis mehrere Gigabyte groß, selbst wenn hier nur einfachste Anwendungen laufen sollen. Um beim nautischen Bild zu bleiben, gleichen sie einzelnen Kreuzern in einem Flottenverband, dessen Ressourcen sie verwenden.
VMs können Vorteile gegenüber Containern haben
Auf den ersten Blick sind VMs gegenüber Containern ressourcenintensiv und komplex. Deshalb liegt die Frage nahe, warum sie statt eines Containers zum Einsatz kommen sollten. Die Antwort ist einfach: Container sind für paketierte Mikroservices, wie sie etwa bei Cloud-Anwendungen zum Einsatz kommen. Sie sind im Rahmen des DevOps-Gedankens sinnvolle Ressourcensparer und dabei im Rahmen ihrer Möglichkeiten frei skalierbar.
Was sie jedoch nicht können, ist Anwendungen vollständig vom Gastgeber-System zu befreien. Sie benötigen immer eine Arbeitsgrundlage in Form eines kompatiblen Betriebssystems. Anders virtuelle Maschinen, die es erlauben es, Anwendungen komplett vom Gastgeber-System zu isolieren – und das schafft eine Reihe praktischer Anwendungsbereiche, auch für Software-Entwickler.
Wo virtuelle Maschinen der Containerisierung überlegen sind
Virtuelle Maschinen eignen sich daher bestens für Anwendungen, in denen es vor allem darauf ankommt, dass das System sicher ist. So lässt sich ein Webserver mit virtuellen Maschinen in sogenannte vServer aufteilen, die ihrerseits für den User wie eigene Server wirken. Oder eine VM bildet eine riskante Umgebung nach, etwa wenn es um kritische Weiterentwicklung kundenbasierter Systeme geht.
Natürlich erlauben VMs auch den Weiterbetrieb von Legacy-Software auf moderner Infrastruktur oder simulieren gar ganze Netzwerkumgebungen, sofern der Host-Rechner entsprechende Ressourcen hat. Interessant für die Softwareentwicklung ist dabei, dass sich die VM an jedem Punkt wie ein echter Rechner verhält – mit den gegebenen Betriebssystem-Funktionen, eigenen Ressourcen und allem Drum und Dran. Dieser kann zum Beispiel auch als mächtige „Sandbox“ für Anwendungen dienen.
Was sind prozessbasierte VMs?
Doch es muss nicht immer der ganze virtuelle PC sein: Von virtuellen Maschinen ist auch bei „Virtual Machines“ wie Java oder .NET die Rede, obwohl diese keinen ganzen PC replizieren, sondern nur die für den Betrieb einer Anwendung benötigten Runtimes zur Verfügung stellen.
Die Vorteile dieser „prozessbasierten Virtual Machines“ liegen auf der Hand, erlauben sie doch die plattformunabhängige und isolierte Ausführung von Anwendungen in einer immer gleichen Umgebung. Die Runtime liefert das nötige Rüstzeug, ist für die Vermittlung zwischen Anwendung und Betriebssystem notwendig und muss dementsprechend für alle gewünschten Betriebssysteme vorliegen.
Sandboxed-Anwendungen als einfache Alternative
Derartige VMs sind allerdings nicht die einzige „Zwischenform“, um leichtgewichtige VMs zu verwenden. Sogenannte Sandboxed-VMs verbinden die Vorteile von VMs und Containern. So bietet Windows seit Windows 10 eine „leichte" Sandboxed-Umgebung als optionales Windows-Feature.
Dazu wird innerhalb des Betriebssystems eine leichtgewichtige VM als „Untersystem“ des regulären Windows-Betriebssystems erstellt, die sich für Testzwecke eignet. Der Hypervisor muss dazu nicht aktiviert werden, es handelt sich auch insofern nicht um eine „echte“ VM, weil die Sandbox-Umgebung bei jedem Start neu erstellt wird und damit „jungfräulich“ ist.
Diese Variante eignet sich hervorragend, um Software auf einem Host-System zu testen, ohne aufwändig mit VMs herumzuhantieren. Auch Linux-User können eine entsprechende Technologie verwenden, die Software Firejail eignet sich hervorragend für das Testing unter Linux-Systemen. Mac-Nutzer müssen leider auf dedizierte Virtualisierungslösungen ausweichen, allerdings besitzt das System selbst eine App-Sandbox.
VMs können auch containern
VMs schließen den Einsatz von Container-Runtimes selbstredend auch nicht aus. Da sich ein virtueller PC wie ein echter PC verhält, spricht nichts dagegen, diesen als Sandbox für Container-Anwendungen zu verwenden beziehungsweise diese dort zu installieren.
Die gängigen Virtualisierungstools können überdies den Hypervisor „durchreichen“, sprich eine Virtualisierung in der Virtualisierung erlauben. Auch umgekehrt ist der Einsatz möglich: So gibt es ein Docker-Image mit VirtualBox, das allerdings voraussetzt, dass die Software auf dem Host-System installiert ist.
Virtualisierung oder Container: Was ist besser?
Obwohl High-Level-Container wie Docker im Hinblick auf die Cloud und DevOps sicherlich die beste Wahl sind, kann es sinnvoll sein, auch an Virtualisierungslösungen zu denken. Obwohl auf den ersten Blick technisch vergleichbar, unterscheiden sich die Lösungen in ihrem Anwendungszweck deutlich.
Während Container als reine Softwareschicht für den Einsatz auf Infrastruktur wie Server-Farmen und Clouds bestens sind, bieten sich virtuelle Maschinen immer dann an, wenn ein vollwertiges Betriebssystem für eine Anwendung benötigt wird. Egal ob Webserver, Test-Umgebung, Entwicklung auf Fremd-Betriebssystemen oder der Weiterbetrieb von Legacy-Software: In all diesen Fällen ist Virtualisierung die bessere oder sogar einzige Lösung.
(ID:48987057)