Wie wir Docker einsetzen
Programme haben Anforderungen an ihre Umgebung. Dies kann ein bestimmtes Betriebssystem sein (Windows, Linux, macOS), eine Laufzeitumgebung für eine Programmiersprache (Python, Java, C#), oder die Verfügbarkeit bestimmter Bibliotheken (GTK, .NET, Qt). Wir wollen uns beim Testen und Evaluieren aber nicht einschränken!
Im FDMLab evaluieren wir Programme und Bibliotheken, die sowohl für den Gebrauch am Rechner, als auch als Serveranwendung entwickelt wurden. Würden wir diese alle auf unserem Testrechner installieren, hätten wir schnell die von Randall Munroe dargestellte Situation erzeugt. Also unser System mit Programmen, Laufzeitumgebungen und Konfigurationsdateien vollgemüllt.
Stattdessen versuchen wir - sofern möglich - die zu evaluierenden Programme als Docker Container zu testen. Wie im Eingangsbild symbolhaft dargestellt1, handelt es sich bei Docker Containern (vereinfacht) um einen Standard um Anwendungen mitsamt ihrer Umgebung zu verpacken und somit auf unterschiedlichen Docker Hosts laufen zu lassen.
Wir verwenden dafür Docker Desktop für Windows.
Docker Container via Browser
Eine Variante Docker zu verwenden, ist mit der Anwendung in dem Container via einer Web GUI im Browser zu interagieren.
Ein Beispiel hierfür ist das Projekt OCR4All.
Mit dem folgenden PowerShell Befehl wird die Vorlage für einen OCR4All Container (image
)
aus der Docker Hub Registry heruntergeladen und lokal ein OCR4All Container erstellt.
$ docker run --rm -it -p 8080:8080 ls6uniwue/ocr4all
Über die Adresse http://localhost:8080
lässt sich die Web GUI des OCR4All Containers aufrufen und bedienen.
Es ist möglich Daten von der eigenen Festplatte mit in den Container einzuhängen (mounten).
$ docker run --rm -it -p 8080:8080 -v ${PWD}:/var/ocr4all/data ls6uniwue/ocr4all
Docker Container als Skript
Docker Container können ähnliche wie Skripte verwendet werden.
Mit dem folgenden Beispiel wird ein OCR-D Workflow ausgeführt, ohne dass die mehr als 60 unterschiedlichen Prozessoren separat installiert werden müssen.
$ docker run --rm -v ${PWD}:/data -w /data -- ocrd/all:maximum bash workflow.sh
ocrd/all:maximum
ist mehrere Gigabyte groß!Wo Docker nicht funktioniert
Es gibt Software, die nicht als Docker Image vorliegt, oder als solche verwendet werden kann. Dazu gehört Software, die eine systemspezifische GUI Bibliothek verwendet.
Beispiele hierfür sind der Page Viewer oder der Transkribus Expert Client. Diese benötigen beide Java als Laufzeitumgebung und stellen ihre GUI mit nativen Betriebssystemkomponenten dar. Docker Container haben keine nativen GUI Komponenten, weshalb diese Programme in einem Docker Container nicht genutzt werden können 2.
Unser Fazit
Wir verwenden Docker um schnell und unkompliziert unterschiedlichste Anwendungen evaluieren zu können. Inzwischen kommen Docker Container bei uns auch praktisch zum Einsatz. Zum Beispiel um gemeinsame Projekte reproduzierbar bearbeiten zu können.
Die Standardisierung von Seefracht-Containern zu ISO-Containern optimierte die Transportkette im Güterverkehr. Daher werden standardisierte virtuelle Container häufig mit Fracht-Containern verglichen. ↩︎
Es gibt Bibliotheken, die die nativen GUI Komponenten für Webbrowser darstellen können. Ein Beispiel hierfür ist GTK Broadway. ↩︎