Es wird Zeit, sich mit Docker zu beschäftigen
Bild: docker.com |
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 |
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 ....