Der Begriff Docker und seine Weiterentwicklungen (Docker-Compose, Kubernetes) gewinnt je länger desto mehr an Wichtigkeit in den Bereichen Softwareentwicklung und IT-Betrieb (DevOps). Es ermöglicht die flexible Portierung von Anwendungen und erleichtert damit das Deployment, das Starten/Stoppen sowie das Migrieren von Software.
DevOps
Dem Ausdruck „DevOps“ sind sicher die meisten der CAS-Teilnehmer bereits mehrfach begegnet. Doch was steckt eigentlich dahinter? Wie die Schreibart des Begriffs erahnen lässt, besteht er einerseits aus „Dev“ (Development) und andererseits aus „Ops“ (Operation). Unter diesem Begriff versteckt sich also eine Methodik für die Zusammenarbeit zwischen Softwareentwicklung und IT-Betrieb. In den meisten Firmen sind dies traditionellerweise zwei verschiedene organisatorische Einheiten. DevOps versucht nun die Schnittstellen zwischen den beiden Bereichen möglichst effizient zu gestalten, damit neu entwickelte Software schnell deployed und sicher betrieben werden kann. Die Verwendung von Docker bietet in dieser Thematik einige wichtige Vorteile, die im nächsten Kapitel beschrieben werden. Wie in der Abbildung ersichtlich, sind weiterführende Themen wie „CI/CD“ (continuous integration / continuous delivery) sowie die agile Softwareentwicklung feste Bestandteile der DevOps-Unternehmenskultur.
Docker vs. Virtuelle Maschine (VM)
Ein Docker Container benötigt weniger Speicherplatz als eine VM, da sich mehrere Container dasselbe Betriebssystem teilen (im Gegensatz zu virtuellen Maschinen). Der grosse Vorteil dabei ist, dass ein Container aufgrund dieser Gegebenheit wesentlich schneller deployed, gestartet und migriert werden kann. Und damit schliesset sich der Themenkreis mit dem anfangs erläuterten Begriff „DevOps“. Die flexible Zuweisung von Ressourcen ist ein weiterer positiver Aspekt dieser Architektur. Betrachten wir die Nutzung über ein ganzes Ökosystem, werden insgesamt weniger Ressourcen benötigt und damit tiefere Kosten verursacht.
Unterschied zwischen Image und Container
Innerhalb einer Docker-Umgebung ist es wichtig zwischen Images und Container zu unterscheiden. Ein Image in ein schreibgeschützter («read-only») Behälter, welcher alle notwendigen Komponenten, Abhängigkeiten und Konfigurationen für eine bestimmte Anwendung beinhaltet. Der Behälter benötigt lediglich etwas Speicherplatz für die Registry und ist im Vergleich zum Container nicht lauffähig. Um die Anwendung ausführen zu können, lassen sich aus einem Image beliebig viele Container erzeugen. Im Gegensatz zum Image ist der Container eine lauffähige Umgebung, in welcher die notwendigen Ressourcen (CPU, Storage, File System) variable zur Verfügung gestellt werden können.
Geschichte
Docker wurde erstmals im März 2013 durch die Firma dotCloud veröffentlicht und gewann im Jahre 2014 zunehmend an Popularität. Der finale Durchbruch gelang durch das Kubernetes-Projekt, welches im gleichen Jahr initiiert worden ist. Firmen wie Microsoft, Red hat, IBM, Docker, Mesosphere, Core OS sowie Saltstack schlossen sich dem Projekt an.
Fazit
Wie immer bei neuen Technologien gibt es sowohl Vor- wie auch Nachteile. Die positiven Aspekte wurden oben erwähnt, es gibt jedoch auch Nachteile bspw. bei Security Aspekten (VM Anwendungen sind mehr isoliert als Docker Anwendungen) oder bei der niedrigeren Flexibilität bezüglich OS-Upgrades. Die einzelnen Aspekte müssen also sorgfältig abgewogen werden – denn auch hier gilt: Choose the right technology for the right application oder bezogen auf den Prozess: Choose the right process for the right outcome.