“Wenn etwas nicht einfach zu verstehen ist,
muss es eben anders erklärt werden ...”

Es wird Zeit, sich mit Docker zu beschäftigen

Quelle: docker.com
Bild: docker.com
Kurz nachdem Google die Alpha Version seines Management-Service für Docker-Container - die "Google Container Engine" - vorgestellt hat, bietet auch Amazon AWS mit dem "EC2 Container Service" eine Preview-Version für ein entsprechendes Werkzeug an. Gleichzeitig hat Microsoft in den letzten Monaten sehr viel Engagement in Richtung Docker gezeigt und eine Partnerschaft mit Docker Inc. bekannt gegeben. Und obwohl ich gestehen muss, dass ich die Entwicklung von Docker bis jetzt eher nur mit einem halben Auge und am Rande verfolgt habe, wird es jetzt höchste Zeit, das zu ändern.

Docker - was ist das?

Docker ist ein Software-System, um virtuelle Anwendungs-Container innerhalb von Betriebssystemen zu erstellen. Was zunächst erstmal sehr abstrakt klingt, ist in Wirklichkeit ein charmant einfacher und robuster Mechanismus, um verschiedene Anwendungsinstallationen inklusive aller benötigter Abhängigkeiten isoliert von anderen Anwendungen laufen zu lassen.  Dabei können sich mehrere Anwendungen (die sogenannten "Container") ein gemeinsames Betriebssystem teilen.

Evolution der Virtualisierung

Zeit vor der Virtualisierung

Schauen wir ein paar Jahre zurück - in eine Zeit, als Virtualisierung noch nicht in der breiten Masse in die Rechenzentren Einzug gehalten hat. Der Administrator, der eine neue Anwendung einführen wollte, stand vor der Überlegung, diese Anwendung zusätzlich auf ein bestehendes System zu installieren, oder eine neue Server-Hardware anzuschaffen. Empfohlen wurde von den Software-Herstellern meist eine dedizierte Maschine. Aus Ressourcen und Zeitgründen wurden dann aber trotzdem oft mehrere Anwendungen parallel auf ein System installiert - mit all den möglichen Problemen inkompatibler Bibliotheken oder Komponenten.

Systemvirtualisierung mit VMware, Hyper-V, Xen und Co.

Seit dem Aufkommen der Virtualisierunglösungen für Standard Server-Hardware hat sich das beschriebene Problem entscheidend entschärft: Bei der Systemvirtualisierung wird zwischen die Hardware und das eigentliche Betriebssystem eine Software-Schicht gelegt (Hypervisor), die es erlaubt, mehrere Betriebssystem-Instanzen parallel auf der selben Hardware laufen zu lassen.
Neben den Hauptvorteilen der Virtualisierung (Hardware-Konsolisierung, automatisierte Administration, ...) ist der Administrator jetzt in der Lage, mit wenig zeitlichem und finanziellem Aufwand nahezu jede einzelne Anwendung auf eine einzelne Betriebssystem-Instanz (VM) zu installieren.

Anwendungsvirtualisierung mit Docker

Bild: docker.com
Bei der Anwendungsvirtualisierung mit Docker wird eine Software-Schicht oberhalb des Betriebssystem-Kernels eingefügt. Diese Software-Schicht ermöglicht es, innerhalb eines Betriebssystems mehrere voneinander gekapselte Bereiche - die sogenannten Container - laufen zu lassen. Diese Container beinhalten die Anwendung selber und alle dafür notwendigen Software-Bestandteile, wie z.B. zusätzlich benötigte Software-Komponenten und Bibliotheken. Diese Container sind zunächst vollständig gegeneinander isoliert und können bei Bedarf z.B. über virtuelle Netzwerkverbindungen oder separat konfigurierte Datenbereiche (z.B. ein gemeinsames Verzeichnis) miteinander verbunden werden.
Auf diese Weise lassen sich alle Dienste einer Anwendung (z.B. Webservice, Datenbank, Daten-Analyse) zwar innerhalb einer Betriebssysteminstanz - gleichzeitig jedoch vollständig isoliert voneinander - betreiben.

Vorteile von Docker

Aus meiner Sicht sprechen vor allem folgende Punkte für den Einsatz von Docker:
  • Virtualisierungsoverhead
    Naturgemäß ist der Ressourcen-Overhead für einen Anwendungs-Container weitaus geringer als der Overhead für ein vollständig virtualisiertes Betriebssystem. Container-Images sind weitaus kleiner als komplette Betriebssysteme und haben ein Startverhalten ähnlich wie der eines reguläreren Prozesses.
  • Portabilität über Maschinengrenzen
    Da ein Docker-Container selber alle benötigten Abhängigkeiten mitbringt, ist der Container nahezu komplett unabhängig von der Betriebssystem-Instanz, auf der der Container ausgeführt wird. So können z.B. CentOS-Container unter Ubuntu ausgeführt werden oder umgekehrt.
  • Versionierung
    Die den Containern zugrunde liegenden Images (Dateisystem-Abbilder) können so aufeinander aufbauend strukturiert werden, dass ein Test einer neuen Anwendungsversion mit Rollback auf die alte Version innerhalb von Sekunden möglich ist.
  • Möglichkeit von Remote-Repositories
    Docker Images werden in Repositories verwaltet. Diese Ablageorte können sowohl lokal auf dem Wirtssystem, als auch remote im Netzwerk organisiert werden. Diese Remote-Repositories können dann global verwendet werden, um Container nach Belieben auf verschiedenen, auch geografisch verteilten Systemen zu starten.

Docker und die Cloud

Docker Container können bereits viele Ihre Vorteile im lokalen Umfeld ausspielen - also direkt in den vier Wänden des eigenen Rechenzentrums. Im Zusammenspiel mit Remote-Repositories und externen Cloud-Services sind jedoch noch eine ganze Reihe weiterer interessanter Anwendungsszenarien denkbar. Alle großen Cloud-Anbieter - allen voran Amazon AWS, Google Cloud Plattform oder Microsoft Azure - bieten mittlerweile offiziellen Support für Docker-Container und entsprechende Infrastrukturhilfen und Dokumentation an.

Und Google und Amazon haben - wie oben bereits erwähnt - mit der "Google Container Engine" bzw. dem "EC2 Container Service" (ECS) Preview-Versionen passender Automatisierungstools am Start.

Docker nur für Linux?

Obwohl Docker auf der Basis von Linux-Systemen entworfen und entwickelt wurde, werden wir in nicht allzu ferner Zukunft Docker mit Windows-Containern im Einsatz sehen. Microsoft hat in den letzten Monaten sehr viel Engagement in Richtung Docker gezeigt und Mitte Oktober 2014 eine Partnerschaft mit Docker Inc. (der Firma hinter Docker) bekanntgegeben. Als Ergebnis dieser Partnerschaft sollen unter anderem Windows Container und die Integration von Docker in folgende Windows-Server Versionen entstehen.
Microsoft kündigt Docker-Support für Windows an
Bild: Microsoft Azure Blog

Mein Fazit

Ich denke, dass Docker das Potential hat, nach VMware und Co. die nächste Virtualisierungswelle einzuleiten. Ich bin gespannt ....