Ist Docker der nächste Stern am Virtualisierungs-Himmel?

Virtuelle Maschinen spielen im Bereich der Software Entwicklung eine wichtige Rolle. Jede zu entwickelnde Software benötigt sowohl eine Entwicklungs- als auch eine Laufzeitumgebung. Üblicherweise werden diese Umgebungen als virtuelle Maschinen (VMs) bereitgestellt. 

Der klassische Prozess der Virtualisierung läuft meist folgendermaßen ab: Der Administrator erstellt die benötigten VMs, installiert auf jeder dieser Maschinen das benötigte Betriebssystem und die erforderliche Software. Oftmals sind hier dieselben Arbeitsschritte notwendig, welche in Summe viel Zeit in Anspruch nehmen. Mehrere Benutzer teilen sich daraufhin den Zugriff auf eine VM. Der Einsatz der VMs ist sowohl technisch als auch örtlich stark eingeschränkt. An einen Betrieb, z.B. auf dem Entwicklernotebook, ist auf Grund der eingeschränkten Hardware des Notebooks kaum zu denken.

Das Open Source Projekt Docker hat es sich zum Ziel gesetzt, für diese Probleme Abhilfe zu schaffen. Dazu verfolgt Docker den Ansatz von Virtualisierung in Containern. Container bezeichnen eine Laufzeitumgebung und umfassen hierbei den Zugriff auf ein virtuelles Betriebssystem, sowie die vom Nutzer installierten Programme. Ein Container basiert auf einem Image, welches Informationen zum eingesetzten Betriebssystem hat und in welchem Anwendungen vorinstalliert werden können. Die Besonderheit von Docker ist, dass kein zusätzliches Betriebssystem, sondern der Kernel des zugrunde liegenden Betriebssystems verwendet wird. Dadurch werden die vorhandenen Ressourcen optimal genutzt. Docker Images können entweder selbst erstellt werden oder es können bereits vorgefertigte Images mit vorinstallierten Anwendungen (z.B. Datenbanken, Webserver etc.) von einem globalen Repository heruntergeladen werden. Images können sehr einfach modifiziert und weitergegeben werden.

Docker spielt seine Stärke aus, wenn es darum geht, mehrere Instanzen parallel zu betreiben. Bei klassischen Virtualisierungslösungen muss ein Image zuerst kopiert und daraufhin gestartet werden. Dies führt schnell zu hohen Anforderungen an die Hardware. Virtuelle Maschinen brauchen in der Regel einige Zeit für den Systemstart und sind nicht so leistungsfähig, wie native Umgebungen. Container in Docker starten sehr schnell und die Performance ist nicht spürbar langsamer, als bei dem Host-Betriebssystem. Außerdem kann ein Image beliebig oft parallel gestartet werden. Dies hat den Vorteil, dass die Ressourcen für das zugrundeliegende Betriebssystem gemeinsam genutzt werden können und so lediglich die Anwendungen im Arbeitsspeicher gehalten werden, die in den einzelnen Containern ausgeführt werden. Die Container werden isoliert voneinander ausgeführt.

Der Einsatz von Docker bei solvistas steigert die Entwicklungsgeschwindigkeit und verbessert die Qualität. Unliebsame Überraschungen beim Live-Betrieb, welche durch unterschiedliche Konfigurationen bei Test- und Produktivumgebungen entstehen können, werden vermieden. Entwickler sparen viel Zeit beim Einrichten der Entwicklungsumgebung, und es ist mit sehr geringem Aufwand möglich, den Kunden Testversionen von in Entwicklung befindlicher Software zur Verfügung zu stellen. So können alle beteiligten Personen im Projekt jederzeit den Stand der Entwicklung einsehen. Die benötigte Zeit zwischen Entwicklung und Go-Live kann durch den Einsatz von Docker signifikant verringert werden. Dadurch profitieren Sie als Kunde von Neuerungen im Entwicklungs-Stack von solvistas.

Fazit

Docker bietet eine leichtgewichtige Lösung, um Anwendungen zu virtualisieren. Durch die Kapselung im Container wird es ermöglicht, erstellte Images sehr einfach zu teilen und auszutauschen. Die Vision vom sparsamen Umgang mit Ressourcen wird von Docker vorangetrieben. Leidige Probleme beim Einrichten und Verwenden von Entwicklungsumgebungen werden von Docker gelöst.

Als Nachteil im Vergleich zu virtuellen Maschinen kann gesehen werden, dass sich die Auswahl an verfügbaren Containern auf einige Unix-basierende Betriebssystemversionen beschränkt. Dies spielt für Java- und Web-Projekte in der Regel jedoch keine Rolle.

Autor: Andreas Feuerstein

Quellen:

https://docker.com/whatisdocker/

http://www.heise.de/developer/artikel/Anwendungen-mit-Docker-transportabel-machen-2127220.html

http://www.heise.de/developer/artikel/Microservices-im-Zusammenspiel-mit-Continuous-Delivery-Teil-2-die-Ablaufumgebung-2423582.html

http://de.wikipedia.org/wiki/Docker_%28Software%29