Docker


Docker ist eine auf Open-Source basierende Container-Engine … Und was bitte ist eine Container Engine? Vereinfacht ausgedrückt sind Container-Engines die leichtgewichtige Variante von virtuellen Maschinen…
Und was sind virtuelle Maschinen?
Virtuell Maschinen, auch VMs genannt, können eine Computerumgebung mit Prozessor und Peripherie via Software nachbilden. Man kann also auf einem Windows-Rechner LINUX laufen lassen. Oder eben einen COMMODORE64 oder AMIGA virtuell wieder auferstehen lassen.

Die virtuellen Maschinen haben den Aufbau von Server-Clustern ab dem Jahre 2000 revolutioniert. Die Hardware wurde von der Software entkoppelt. Dadurch gewinnt man viele Freiheitsgrade, wie z.B. Sicherung von kompletten Umgebungen, automatische Starts bei Ausfall, parallele Bearbeitung von unterschiedlichen Betriebssystemen auf einer Hardware, usw.

Ebenso revolutionär verhält es sich ab 2013 mit der Container Technologie. In einem Container werden Anwendungen „abgeschottet“ hinterlegt. Jeder Container ist eine kleine Welt für sich, aber im Gegensatz zu VMs mit den Wurzeln im Betriebssystem. Das bedeutet, dass das Betriebssystem außerhalb des Containers bleibt. Damit sind Container-Images deutlich kleiner, als Images von virtuellen Maschine.

Mit einem Image können beliebig viele Instanzen, eine Instanz ist ein Container, erzeugt werden. Nachfolgende Abbildung zeigt drei Docker-Engines mit darin enthaltenen, laufenden Containern.

Die erste Engine enthält verschiedene Web-Umgebungen. Docker ist prädestiniert für diese Aufgabe. Es gibt einen Container, der das beliebte Webseiten-Entwicklungsprogramm WORDPRESS beinhaltet; und zwar inklusive Server. Die Datenhaltung erfolgt in einem zweiten Datenbank-Container. Ob dieser Container die Datenbank MariaDB oder MySQL verwendet, ist dem Benutzer überlassen. Ein Umzug des Webservers von einem externen Serveranbieter zu einem anderen Anbieter ist damit einfach. Es besteht die Möglichkeit mit einer lokalen oder einer INHOUSE Docker-Engine zu testen. Die Verwendung in CLOUD-basierende Umgebungen ist ebenso möglich.

Beispiel 2 in obiger Abbildung zeigt Compilerumgebungen. Es gibt kaum eine Programmiersprache, die nicht in einem Container-Image verfügbar ist. Die Firma Docker-Inc. hat durch die Bereitstellung der möglichen Container-Images in zwei CLOUD basierenden Container-Image Bibliotheken DOCKER-HUB und DOCKER-STORE (ab 2017) den Austausch von Images gefördert. Der Docker-Hub ist für die Community gedacht und der STORE war für offizielle Images, die von der Firma Docker gewartet werden. „War“ deshalb, weil im Januar 2019 der STORE-Pfad wieder geschlossen und stattdessen der DOCKER HUB umstrukturiert wurde.

https://hub.docker.com

Jeder Benutzer, der sich ein Docker-Konto einrichtet, erhält automatisch die Möglichkeit Images hoch- oder runterzuladen. Somit ist der Einstieg in die Docker-Welt denkbar einfach, da man von Anfang an Teil der Community ist.

Es gibt sogar mittlerweile Docker-Engines, die auf dem Klein-Computersystem Raspberry-PI ausführbar sind. Das dritte Beispiel in obiger Abbildung zeigt den Einsatz als Simulationsumgebung für Steuerungen. Bei geschickter Wahl der Schnittstellen, kann eine Steuerung komplett hardwareunabhängig werden. Genau das ist eines der wichtigsten Ziele der neusten Digitalisierungswelle 4.0. Maschinen können somit simuliert werden und vor dem Einsatz getestet werden. Ebenso kann die reale Hardware von Maschinen in Server-Racks realisiert werden. Dadurch kann genau so viel Hardware gesteckt werden, wie benötigt wird und nicht mehr.

Diese Strategie basiert auf der mikro-service orientierten Architektur von Softwaresystemen. Momentan wird viel in diese Richtung entwickelt und Docker unterstützt diesen Trend. Doch die Vielzahl entstehender Schnittstellen zwischen den einzelnen „Services“ sollten man im Auge behalten. Jede „externe“ Schnittstelle kostet deutlich mehr Aufwand als eine „interne“ Schnittstelle. Nur durch konsequente Umstellung der Test- und Auslieferungs-Prozesse lässt sich dieser Mehraufwand kostenbewusst umsetzen.

Lachmann und Rink setzt Docker in allen drei Beispiel-Szenarien der obigen Abbildung ein. In einem Beispiel haben wir einen REST basierten Server entwickelt, der in der Test-Umgebung spezielle Hardware benötigt hätte. Die Entwicklung konnte aufgrund der Container-Technologie ca. ein halbes Jahr bevor die reale Hardware zur Verfügung stand, vorangetrieben werden. Der Roll-Out Test beim Kunden hat strahlende Gesichter erzeugt, da die Anwendung mehr oder weniger auf Anhieb funktioniert hat. Ein klarer Zeit- und Kostenvorteil, der in unserer heutigen schnelllebigen Zeit entscheidend ist.

Michael Porath, Lachmann & Rink