Kommentar: Docker – das Ende der Virtualisierung
Virtualisierung hat einen beeindruckenden Siegeszug hinter sich. Sie bringt klare Einsparpotenziale durch die bessere Auslastung der Hardware. Aber die Welt bleibt nicht stehen.
- Eberhard Wolff
Seit einigen Jahren ist Docker in meinem Arbeitsumfeld eine äußerst wichtige Technologie. Mit Docker lassen sich Anwendungen in Containern ausführen, was im Gegensatz zur Virtualisierung viel leichtgewichtiger durchführbar ist.
Eine virtuelle Maschine simuliert einen kompletten Rechner, auf dem eine eigene, vollständige Betriebssysteminstanz läuft. Sowohl die Simulation des Rechners als auch die große Anzahl Betriebssysteminstanzen benötigen eine große Rechenleistung. Docker-Container nutzen hingegen gemeinsam nur eine Betriebssysteminstanz, haben aber ein eigenes Netzwerk-Interface und ein eigenes Dateisystem. Dadurch erreicht Docker eine weitgehende Isolation der Container, und ein Prozess verbraucht in einem Docker-Container praktisch genauso wenig Ressourcen wie Prozesse, die direkt auf dem Betriebssystem laufen.
Docker ist weitaus effizienter
Docker schafft so eine Effizienz, die die der Virtualisierung weit in den Schatten stellt. Hunderte von Docker-Containern auf einem Laptop sind ein Kinderspiel.
Zusätzlich löst Docker noch ein anderes Problem: die Installation von Software. Vor Docker waren dafür Werkzeuge wie Chef oder Puppet in der Werkzeugkiste eines Entwicklers zu finden, denn sie erlauben es, Software wiederholbar zu installieren. Ein Skript definiert den Zustand, in dem der Server sein sollte. Daraus leitet das Werkzeug die benötigten Installationsschritte ab. Man spricht von Idempotenz. Ist auf dem Server noch gar keine Software vorhanden, installiert das Werkzeug die Software vollständig. Ist eine alte Version installiert oder ein Teil der Software vorhanden, wird die Installation vervollständigt und aktualisiert. Leider ist die Definition des gewünschten Zustands kompliziert und aufwendig. Zudem schleichen sich dabei leicht Lücken ein, weil ein Teil des Zustands eben doch nicht definiert wurde.
Docker hingegen nutzt eigene Images. Das Erstellen der Images erfolgt durch ein Skript, das jeden Schritt der Installation ausgehend von einem nackten Server umfasst. Gegenüber einer idempotenten Installation ist der Ansatz viel einfacher und garantiert lückenlos. Hinter den Kulissen nutzen Images Teile anderer Images. Damit spart Docker Speicherplatz, und das Erstellen neuer Images ist rasend schnell, weil nur die wirklich neuen Teile eine Erstellung erfordern.
Passend zum Trend
Docker hat stark von einem geschickten Timing profitiert: Der Trend zu Microservices führt dazu, dass eine Vielzahl von Anwendungen effizient zu betreiben ist. Der geringe Ressourcenverbrauch und die einfache Installation kamen da gerade zur rechten Zeit. Und selbstverständlich hilft Docker so auch bei den häufigen Deployments in modernen Continuous-Delivery-Pipelines.
Darum ist ein Artikel, der den Tod von Docker ankündigt, völlig übertrieben. Aber dabei geht es auch um etwas ganz anderes: Eine erfolgreiche Technologie bedeutet noch lange keinen kommerziellen Erfolg für den Erfinder. Sun Microsystems hat mit Java eine wichtige Technologie erfunden, die Grundlage eines ganzen Industriezweigs bildet, aber selbst davon nie viel profitiert. Am Ende hat Sun sogar seine Eigenständigkeit verloren, sodass Oracle die Firma übernahm.
Docker als Basistechnologie
Dieses Schicksal droht der Firma hinter Docker, Docker Inc., vielleicht auch. Docker selbst ist nur noch eine Grundlage, eine Basistechnologie. Schließlich nützt es wenig, wenn Docker-Container auf einem einzelnen Server laufen. Bei einem Absturz des Servers fallen alle Docker-Container aus. Die Skalierung ist durch die Leistungsfähigkeit des einen Servers begrenzt. Daher setzen andere Programme auf Docker auf, die es ermöglichen, Docker-Container in einem Cluster von Servern laufen zu lassen. Sie ergänzen Docker durch Load Balancing oder Fail Over und bieten weitere wichtige Konzepte speziell für Microservices an, beispielsweise Service Discovery. Sie haben viele Features, die man sonst nur von Enterprise-Virtualisierungen gewöhnt ist. Solche Cluster-Container-Ansätze stehen hinter der Infrastruktur von Google und haben dort gezeigt, dass sie in solchen anspruchsvollen Umgebungen gut funktionieren.
Docker, Inc. versucht den Clusterbereich mit Docker Swarm Mode abzudecken – eine einfache Option. Es kann aber mit Kubernetes aus dem Umfeld von Google und der Linux Foundation nicht mithalten. Denn Kubernetes ist zwar komplexer, bietet aber eine vollständige Lösung. Als Ablaufumgebung für Microservices entwickelt sich Kubernetes aktuell zum De-facto-Standard. Außerdem hat es die Unterstützung der großen Cloud-Anbieter wie Amazon, Microsoft oder Google hinter sich. Sogar Docker, Inc. wird Kubernetes in die eigene Docker-Distribution aufnehmen. Das Unternehmen hat zwar Einfluss auf Docker, aber in dem wichtigen Cluster-Bereich schwenkt es auf das Angebot der Mitbewerber um. Kubernetes ist zwar als Google-Projekt gestartet, gehört allerdings mittlerweile der Cloud Native Computing Foundation und wird offen weiterentwickelt. Für Anwender bedeutet das mehr Wettbewerb und weniger Lock-in.
Container beerben die Virtualisierung
Docker und Kubernetes sind mehr als lebendig und aus der Microservices- und Continuous-Delivery-Welt nicht mehr wegzudenken. Die Container-Technologien schicken sich sogar an, das Erbe von Virtualisierung anzutreten, denn sie sind leichtgewichtiger und haben sich in komplexen Cluster-Umgebungen bewährt, die für anspruchsvolle Anwendungen notwendig sind. Außerdem ermöglichen Docker Images die Installation von Software zuverlässig und einfach und stellen eine gute Alternative zu klassischen Installationswerkzeugen dar.
Wer heute noch auf klassische Virtualisierung oder klassische Werkzeuge für die Installation von Software setzt, und noch keinen Blick auf Docker geworfen hat, hat einen wichtigen Trend verschlafen. Ob dabei auch Docker, Inc. Geld verdient, ist eher nebensächlich. (bbo)