Docker vs VM – Was ist besser?

Veröffentlicht von Lukas am

Wer sich schon einmal mit dem Smart Home näher befasst hat, stößt schnell auf unterschiedliche Installationsmethoden. Auf der einen Seite gibt es ein Lager, das die virtuelle Maschine (VM) anpreist, die anderen nutzen lieber Docker als Plattform. Doch was ist eigentlich besser und worin unterscheiden sich beide Methoden? Das Thema Docker vs VM ist jedenfalls für uns alle im Smart Home sehr interessant.

Nochmals interessanter wird das Thema, da die meisten NAS-Systeme beide Möglichkeiten bieten. So kann beispielsweise ein QNAP NAS oder auch ein Synology NAS sowohl Docker-Container als auch virtuelle Maschinen betreiben.

Wer es lieber unabhängig vom NAS macht, nutzt vielleicht eher Proxmox und hat auch dort wieder die Wahl zwischen VM und Docker. Gar nicht so leicht, wenn man sich dann als Neuling entscheiden muss, welchen Weg man geht.

Damit du einen guten Überblick hast und auch die zentralen Unterschiede beider Methoden besser verstehst, möchte ich dir in diesem Artikel einen guten Überblick geben. Dabei blicken wir auf die technischen Unterschiede und klären die Frage, wieso Docker immer beliebter wird.

Synology ,8 GB , DS920+ 4 Bay Desktop NAS Gehäuse
Synology ,8 GB , DS920+ 4 Bay Desktop NAS Gehäuse*
Daten blitzschnell sichern und wiederherstellen: Sichern Sie wichtige Daten

Zuletzt aktualisiert 2024-12-24 / (*) Affiliate Links / (**) Affiliate Links, Preis kann abweichen (andere Plattform) / Bilder von der Amazon Product Advertising API / Der angegebene Preis kann seit der letzten Aktualisierung gestiegen sein.

Was ist Docker?

Damit wir die Unterschiede besser verstehen können, sollten wir zunächst die Frage klären, was Docker eigentlich ist. Denn gerade für Anfänger ist auf den ersten Blick kein Unterschied zu einer virtuellen Maschine erkennbar, doch sie sind definitiv da.

Bei Docker handelt es sich um eine freie Software, mit der man Anwendungen isoliert voneinander betreiben kann. Hierfür ist die Containerverwaltung zuständig. Dabei kann man sich einen Container vorstellen als fertigen Baustein, der sich sofort in der eigenen Umgebung einsetzen lässt. Ein Container kann sowohl den Code, das Laufzeitmodul, die Systemwerkzeuge als auch die Systembibliotheken enthalten. Laut Entwicklern stellt ein Container damit alles bereit, was auch auf einem Rechner installiert werden kann. Dabei basieren die Container auf Linux-Techniken.

Stell dir vor, du arbeitest an einem Containerbahnhof. Es gibt dort verschiedene Container und Maschinen, mit denen die jeweiligen Container transportiert und verladen werden können. Welcher Container nun an deinem Bahnhof ankommt, ist völlig egal. Du kannst dank deiner Ausstattung (z. B. LKWs zum Transport) einfach damit umgehen. Das bedeutet nun, dass es die Infrastruktur zur Verarbeitung der Container genau ein Mal gibt. Und zwar bei dir. Diese Infrastruktur ist dazu in der Lage, mehrere Container zu verarbeiten, ohne dass du hierfür auf weitere Infrastruktur angewiesen bist.

Eine sehr gute Beschreibung für Docker findest du übrigens bei Geekflare. Toll beschrieben!

Was ist eine virtuelle Maschine?

Im Gegensatz zu einem Container bringen virtuelle Maschinen einen größeren Umfang mit sich. Eine virtuelle Maschine ist im Grunde ein völlig eigenständiger Computer, der nicht an den Computer gebunden ist, auf dem er läuft. Damit das möglich ist, muss diese virtuelle Maschine einiges mehr an Software mit sich bringen. Der wohl größte Unterschied besteht nun darin, dass in der virtuellen Maschine ein komplett eigenständiges Betriebssystem installiert ist. Bei einem Docker-Container entfällt das.

Der virtuellen Maschine kann man nun einzelne Ressourcen zuordnen. Zum Beispiel kannst du bestimmen, wie viel Arbeitsspeicher die Maschine nutzen darf oder auf welche USB-Geräte sie Zugriff hat. Der Hypervisor ist dafür zuständig. Er kümmert sich um das Ressourcenmanagement.

Vertiefe dein Wissen:  Windows 10: automatische Neustarts

Eine virtuelle Maschine ist daher im Umfang wesentlich größer und hat den Nachteil, dass auch das Betriebssystem sowie alle zugehörigen Softwareprodukte regelmäßig aktualisiert werden müssen. Oft werden die Daten dabei auch innerhalb der VM gespeichert, so dass diese mit der Zeit immer größer wird.

Der Vorteil besteht nun natürlich in genau dieser strikten Isolation. Eine virtuelle Maschine ist gewissermaßen eine Art Blackbox, die lediglich die Ressourcen des Computers nutzt. Theoretisch (!) ist es damit möglich, dass sich die virtuelle Maschine einen Virus einfängt, dieser sich aber nicht auf die anderen Computer ausbreitet. Theoretisch sage ich deshalb, da es immer wieder Sicherheitslücken geben kann, die das umgehen oder Anwender, die diese strikte Trennung durchbrechen. Zum Beispiel durch gemeinsam genutzte Dateiablageorte.

Wie steht es um die Portierung?

Anwender verstehen die Portierung häufig falsch. Nicht nur im privaten, sondern auch im beruflichen Umfeld. Denn manchen ist gar nicht klar, wie genau eine Portierung mit Docker oder VMs abläuft.

Wir wissen nun, dass eine VM deutlich komplexer ist und im Grunde völlig getrennt vom eigentlichen Computer laufen kann, der die Ressourcen bereitstellt. Das bedeutet, dass diese virtuelle Maschine jederzeit auf einen anderen Computer kopiert und gestartet werden kann. Da VMs in der Regel auch auf einen längeren Zeitraum ausgerichtet sind, werden diese nicht selten von einem Computer auf den nächsten verschoben. Das funktioniert problemlos und ist auch so vorgesehen.

Docker-Container hingegen sind keine Konstrukte, die für einen längeren Zeitraum vorgesehen sind. Das bedeutet, dass bei einem Umzug von Computer A auf Computer B der komplette Container zerstört und neu geladen wird. Die Daten werden dabei nicht zerstört, denn diese werden nicht im Container gelagert. Stell dir den Container als eine Art unveränderliche Ressource vor. Er bietet dir die Logik, um gewisse Aufgaben zu erfüllen, soll dabei aber selbst nicht verändert werden. Das Verhalten und die Änderung kommen von den Daten. Sie liegen zum Beispiel in einem Ordner auf deinem Computer und der Container greift lediglich darauf zu.

Das Thema Updates

Um dir das Thema Updates etwas klarer zu machen, greifen wir wieder auf ein Beispiel zurück. Du hast ioBroker in einem Docker-Container installiert und auf einem anderen Computer in einer virtuellen Maschine. Der Computer mit dem Container nennen wir Computer A. Computer B kümmert sich um die virtuelle Maschine.

Nun veröffentlichen die Entwickler von ioBroker ein neues Update. Im Zuge des Updates gibt es auch einen neuen Docker-Container. Virtuelle Maschinen erhalten ihre Updates aus Repositories.

Während du nun auf Computer B in die Konsole wechselst und dir mit diversen Befehlen die Updates lädst, wirst du auf Computer A einfach den Docker-Container löschen und neu installieren. Doch warum ist das so?

Wir haben bereits gesagt, dass Docker-Container eine Art unveränderliches Konstrukt sind. Du passt sie nach der Erstellung nicht mehr an und spielst auch keine Updates ein. Sie sind gewissermaßen das Plastik in der IT-Welt. Nach einmaligem Gebrauch werfen wir es weg. Der neue Docker-Container verbindet nun die von dir angelegten Ordner der Daten mit seiner eigenen Logik. Zuständig ist die Konfiguration. Die Container werden nun gestartet und das System läuft wieder.

Vertiefe dein Wissen:  OnlyOffice Docs im Überblick

Die Neuinstallation einer virtuellen Maschine würde hingegen einen enormen Zeitaufwand benötigen. Denn hier musst du nicht nur das Betriebssystem aktuell halten, sondern dich auch um das Datenmanagement kümmern. Während also Docker strikt zwischen Software und Daten trennt, kann das bei virtuellen Maschinen Hand in Hand gehen.

Was ist besser? Docker vs VM?

Eine pauschale Antwort auf die Frage Docker vs VM ist wohl kaum möglich. Sowohl Docker als auch virtuelle Maschinen sind derart unterschiedlich, dass auch der Einsatz nicht immer gleich ist. Viele Rechenzentren bieten ihren Kunden zum Beispiel eigene virtuelle Server. Hierbei muss es eine strikte Trennung zwischen den einzelnen Servern geben, so dass die Ressourcen begrenzt werden können. Und hier liegt im Grunde einer der Knackpunkte.

Den virtuellen Maschinen kann man einzelne Ressourcen geben und nehmen. Damit lassen sie sich sehr individuell konfigurieren. Da Docker-Container sich das Betriebssystem und die Ressourcen teilen, stehen hier immer alle Ressourcen zur Verfügung. Verschlingt nun ein Container jede Menge Ressourcen, wirkt sich das auf andere Container aus. Virtuelle Maschinen hingegen können immer nur so viel der Ressourcen nutzen, wie ihnen zugewiesen wurde.

Gerade im Smart Home kann es jedoch komfortabel sein mit Docker zu arbeiten. Denn wird das System aktualisiert (z. B. ioBroker), so kann einfach der Container ausgetauscht werden und das System ist wieder auf dem neuesten Stand. Virtuelle Maschinen müssen hingegen manuell auf den neuesten Stand gebracht werden, was einen größeren Zeitaufwand bedeutet. Gerade Anfänger sollten daher in meinen Augen schon mal in Richtung Container schauen. Das Konstrukt mag zwar zu Beginn etwas verwirrend sein, es spart jedoch jede Menge Arbeit.

Ein weiterer positiver Nebeneffekt für dich ist dabei, dass du die Container auch dann austauschen kannst, wenn du so richtigen Mist gebaut hast. Der Container ist kaputt und die Software läuft nicht mehr? Dann tausche ihn einfach gegen einen neuen aus und alles funktioniert wieder!

Container aus der Sicht von Softwareentwicklern

Für viele sind alle IT-Berufe gleich. Doch in der Praxis merkt man schnell, dass es gewaltige Unterschiede gibt. Nehmen wir als Beispiel Systemadministratoren und Softwareentwickler. Beide sind in der IT tätig, haben aber ganz andere Kernkompetenzen. Was übrigens nicht bedeutet, dass der eine nichts von der Arbeit vom anderen versteht. Der Schwerpunkt ist nur ein anderer.

Entwickelt ein Softwareentwickler nun eine komplexe Software und möchte diese betreiben, so gibt er sie (sofern er sie nicht selbst in Betrieb nimmt) an einen Systemadministrator, der sich um den Betrieb kümmert. Dieser weiß allerdings nicht haargenau welche Voraussetzungen notwendig sind. Um ihm das Leben leichter zu machen, kann der Softwareentwickler alle Voraussetzungen und Abhängigkeiten mitsamt der Software in einen Container verpacken. Der Systemadministrator weiß nun, dass er diesen Container in Betrieb nehmen muss und die Software funktioniert.

Damit schließt sich der Kreis zu meinem Beispiel des Containerbahnhofs. Denn im Grunde ist es dem Systemadministrator völlig egal, was er da bekommt. Durch die einheitliche Plattform weiß er, wie er es in Betrieb nehmen muss. Die einheitliche Verständigung und Zusammenarbeit fällt nun leichter. Denn sowohl der Softwareentwickler als auch der Systemadministrator verstehen Docker.


Avatar-Foto

Lukas

Als Softwareentwickler und Projektmanager mit einem Master of Science in Wirtschaftsinformatik weiß ich genau, wie die Dinge in der IT zu funktionieren haben. In meinem Blog kombiniere ich seit mehr als 7 Jahren mein Wissen mit meiner Neugier im Bereich Smart Home. Transparenz und Praxisnähe stehen für mich dabei im Vordergrund. Mein Fokus liegt vor allem auf der Software ioBroker, da ich mein eigenes Smart Home damit betreibe. Meine Beiträge basieren somit nicht nur auf theoretischem Know-how, sondern auch auf praktischen Erfahrungen aus meinem vernetzten Zuhause. Mein persönliches Ziel ist es, dir Einblicke in das Smart Home zu geben, die dich wirklich voranbringen.

4 Kommentare

Avatar-Foto

Udo · 17. Februar 2022 um 14:40

Hi Lukas,

ein paar Anmerkungen hätte ich noch …
– Sowohl VMs als auch Docker Container sind nicht zwangsweise „portabel“. Logischerweise kommt es dabei auch auf die Hardware an. Eine x386 Version/Sytem ist logischerweise nicht mit einer ARM Version tauschbar. Oft gibt es aber auch speziell angepasste Docker Container für ARM CPUs.
– Proxmox unterstützt auch LXC Container. Das ist fast wie eine VM, aber ohne den Linux Overhead.
– Eine VM kann ich mit allem füllen, was emuliert werden kann. Also quasi ganze PCs inkl. Betriebssystem. Egal ob Windows oder Linux. Das macht oft Sinn wenn, wenn ich selbst was installieren und konfigurieren will. Nachteil: Verbraucht viele Recourcen im Gegensatz zu Containern. Aber ich kann in der VM machen was ich will.
– Container sind klein und schnell, aber unflexibel. Da kann ich nicht machen was ich will. Theoretisch schon, aber bei Updates vom Anbieter wird ja alles wieder ersetzt. Der ganze Container. So werden selbst installierte Zusätze wie Treiber oder Erweiterungen nach einem Update verschwinden. Je nachdem wie der Container konfiguriert ist.

LG

    Avatar-Foto

    Lukas · 17. Februar 2022 um 14:59

    Hallo Udo,

    ich habe mich ja schon gefragt, ob du da nicht die eine oder andere Ergänzung hast. 😉
    Vielen herzlichen Dank für deine Zeit.

    Im Grunde kann ich deine Punkte nachvollziehen (außer dass ich von LXC noch immer zu wenig weiß 😉 ). Beim letzten Punkt bin ich allerdings etwas kritisch.
    Denn in meinen Augen sind Container nicht dazu da, um sie zu verändern. Wie du schon richtig sagtest, sind sie ja im Grunde die digitalen Wegwerfprodukte. Ob da Änderungen überhaupt angedacht sind (nach der Veröffentlichung) sehe ich kritisch.
    Das mit den Versionen aus deinem ersten Punkt stimmt. Das habe ich für den Artikel ausgeklammert. War vielleicht taktisch nicht so gut, aber ich glaube die Unterschiede kommen trotzdem ganz gut rüber.

    Ich werde mich mal ein wenig in das Thema LXC einlesen, da kann ich noch eine Menge dazulernen.

    Smarte Grüße

      Avatar-Foto

      Pascal · 10. November 2022 um 09:04

      Einen Docker Container (bzw Image) zu erweitern ist gar kein Problem. Man schreibt dazu einfach ein eigenes Dockerfile, verwendet als Base Image z.B. die gewünschte ioBroker Version und fügt dann in dem Dockerfile seine änderungen hinzu um sich daraus dann sein eigenes Image zu bauen. Klingt komplizierter als es am Ende ist 🙂
      Auch die Ressourcen lassen sich mit Docker pro Container limitieren, das in der Websuche der Wahl zu verwendende Stichwort ist „cgroups“, hier wird es dann allerdings etwas komplexer.

      Grüße

        Avatar-Foto

        Lukas · 10. November 2022 um 09:20

        Hallo Pascal,

        du hast Recht, ein eigenes Dockerfile kann das Image erweitern. Von Haus aus ist es aber so, dass ein Image nachträglich nicht bearbeitet wird. Es wird stattdessen neu gebaut und wandert dann praktisch wieder in die Umgebung. Und genau auf diesen Aspekt möchte ich in meinem Artikel raus.
        Dass man für die Begrenzung der Ressourcen komplexe Wege gehen muss zeigt mir außerdem, dass von Haus aus dieser Weg eigentlich gar nicht angedacht war. Somit hat die virtuelle Maschine was das Thema Ressourcenbegrenzung angeht, die Nase vorn.

        Smarte Grüße

Schreibe einen Kommentar

Avatar-Platzhalter

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert