Wie wir Docker einsetzen

Symbolfoto für Containermanagement mit Docker. Photo by Frank McKenna on Unsplash.

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.

[Python Environment](https://xkcd.com/1987/) von Randall Munroe unter [CC BY-NC Lizenz](http://creativecommons.org/licenses/by-nc/2.5/).
Python Environment von Randall Munroe unter CC BY-NC Lizenz.

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

flowchart TD subgraph Container[Container] FC[Dateien] Server[[Server]] DB[(Datenbank)] Lib{{Bibliotheken}} end Browser[[Browser]] FU[Dateien] FU <--> FC --> Server Server --> Browser DB --> Server Lib --> Server

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
Das Image 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.


  1. 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. ↩︎

  2. Es gibt Bibliotheken, die die nativen GUI Komponenten für Webbrowser darstellen können. Ein Beispiel hierfür ist GTK Broadway↩︎

Benjamin Rosemann
Benjamin Rosemann
Data Scientist

Ich evaluiere KI- und Software-Lösungen und integriere sie in den Archivalltag.

Ähnliches