Docker Container sind eine noch recht junge Technologie die trotzdem eine erstaunliche Reife zeigen.

Virtualisierungstechnologien haben in den letzten Jahren das Arbeitsumfeld im Rechenzentrum völlig verändert. Dank der omnipräsenten Cloud können Unternehmen mit Hilfe von IaaS nun sehr flexibel auf veränderte Anforderungen reagiert werden und die Leistung fast beliebig nach oben skaliert werden. Bei Bedarf können neue virtuelle Maschinen problemlos aus der Cloud bezogen werden.

Schwierig gestaltet sich aber der ökonomische Umgang mit Ressourcen,, wenn es darum geht viele kleine Systeme zu verwalten, die jedes für sich nur wenig Last produzieren. Auch wenn die Virtualisierung versucht sehr clever mit dem virtuellen RAM, CPU und Massenspeicher um zu gehen, gibt es einen unvermeidlichen Overhead. Dies kann sehr schnell dazu führen, dass die einzelnen virtuellen Maschinen Ressourcen belegen ohne tatsächlich ausgelastet zu sein.

Unternehmen, die ihre Infrastruktur selbst betreiben, können in diesem Fall an die Grenzen der Ressourcen ihrer Hardware stoßen. Unternehmen, die stattdessen IaaS nutzen und in der Cloud virtualisieren, müssen immer weitere virtuelle Maschinen beziehen, in beiden Fällen werden die Kosten ohne echte Not immer weiter nach oben getrieben. 

Hier geht Docker mit Containern einen anderen Weg. Hier wird nicht eine komplette Maschine virtualisiert, sondern die einzelnen Applikationen laufen in hermetisch abgeschotteten Umgebungen. Alle Container, die auf einem Server laufen, teilen sich nur den Kernel-Prozess. In dem Container können, unabhängig voneinander, Programme laufen, wie z.B. Datenbanken oder Webserver. Das bedeutet, Programme und Prozesse können auf einem System strickt von einander getrennt werden.

Da Docker seinerseits keine Virtualisierung ist sondern vielmehr eine Abschottung einzelner Prozesse, können Container auch in einer Virtuellen Maschine verwendet werden. Das ermöglicht ein Stageing mit mehreren Test-Stufen auf nur einer Virtuellen Maschine zu realisieren. In aller Regel wird auf Entwicklungs- und Test-Umgebungen die meiste Zeit keine Last gefahren, trotzdem binden diese Maschinen Ressourcen in Form von Storage, RAM und Rechenleistung. Nicht so mit Docker, da in den Container keine redundanten System-Prozesse laufen und es keine reduntanten Dateien gibt.

Ein weitere Vorteil der Docker-Technologie ist, dass die Container in Sekunden einsatzbereit sind. Der Grund ist, dass Docker ein Repository mit Container-Images für die gängigsten Anwendungsfälle bereit hält. So gibt es zum Beispiel fertige Images mit Wordpress. Ist das Image erst einmal initial heruntergeladen, erfolgt der Rollout von Containern in Sekunden. Vorhandene Images lassen sich durch so genannte Dockerfiles den eigenen Bedürfnissen anpassen. Das Erstellen von Dockerfiles ist weit einfacher als der Umgang mit RPM-Spac-Files, Makefiles oder Kickstart-Files. Mittlerweile gibt es bereits Distributionen wie z.B. CoreOS, die auf ein Paketmanagement verzichten und stattdessen Docker-Container verwenden.

Obwohl bei der klassischen Virtualisierung und der neuen Docker Technologie der Begriff "Images" verwendet wird, hat dieser Begriff in den jeweiligen Zusammenhängen nur wenig miteinander zu tun. Ein Docker Image stellt quasi die Blaupause für einen Container da. Die Flexibilität eines fertigen Images lässt sich durch die Möglichkeit der Parametisierung der Container noch weiter erhöhen. Auf diese Weise kann das Verhalten von Diensten schon beim Starten der Container beeinflusst werden. Dies ermöglicht es mehrere Container-Instanzen eines Images parallel zu betreiben. So können in Sekunden beliebig viele Test-Stufen bereitgestellt werden oder verschiedene Container miteinander verschaltet werden. 

CoreOS https://coreos.com/docs/running-coreos/platforms/iso/