Docker-Container
   für computergestützte Datenauswertung

Günter Quast, Nov. 2020, akt. OKt. 2023

Verwendung von Docker-Containern

Für die Datenauswertung sind eine Reihe von Software-Werkzeugen notwendig, die entweder auf dem eigenen Rechner oder in einer virtuellen Maschine bereit gestellt werden müssen. Neuerdings haben sich auch Cloud-Lösungen durchgesetzt, bei denen die Softwarepakete auf Servern bereit gestellt werden, die über eine Web-Schnittstelle z. B. Jupyter Notebooks in einem Web-Browser zur Verfügung stellen.

Eine weitere Möglichkeit, komplexe Software-Umbebungen vorkonfiguriert bereit zu stellen, sind Container-Lösungen, bei denen alle zusätzlich zu einem Standard-Betriebssystem benötigten Software-Komponenten vorhanden sind, wie z. B. Docker Container. Die KIT-Fakultät für Physik betreibt seit dem Sommersemester 2020 einen Server für Studierende, der Jupyter-Notebooks für die Grundausbildung in Rechneranwendungen, Kurse zur rechnergestützten Datenauswertung und für praktische Übungen in der Teilchenphysik swie zur Nutzung bei der Auswertung von Versuchen in den physikalischen Praktika bereit stellt, .s Jupytermachine. Benötigte Softwarekomponenten und die Jupyter-Umgebung werden mit Hilfe von Docker-Containern bereit gestellt (s. Bachelor Arbeit J. Eppelt).

Docker-Container für lokale Installation

Docker-Container können auch sehr einfach und weitgehend plattformunabhängig lokal verwendet werden. Dazu muss lediglich die Docker-Umgebung installiert und passende Container geladen werden.

Die Installation von Docker auf verschiedenen Betriebssystemen ist auf den Seiten des Docker-Projekts beschrieben.
Auf dieser Web-Seite werden als Beispiel drei Docker-Container bereit gestellt, die einen Jupyter-Server in einem Container starten und eine auf der Programmiersprache Pyhton3 basierende Datenanalyse-Umgebung bereit stellen. Die zusätzlich zum Basis-Betriebssystem Ubuntu 20.04 vorhandenen Komponenten können den ebenfalls vorhandenen Dockerfiles in den entsprechenden Unterverzeichnissen im Verzeichnis containers entnommen werden, die zum Bauen der Docker-Images verwendet wurden.

Zusätzlich zu den im ersten Image vorhandenen Komponenten zur Python-basierten Datenauswertung (cgda:20.04) enthält das zweite das am CERN entwickelte und in der Teilchenphysik und angrenzenden Gebieten verwendete Datenanalyse-Framework Root (da-root:20.04). Der dritte, sehr umfangreiche Container (da-full:20.04) enthält zusätzlich eine LaTeX-Umgebung, um LaTeX in Notebooks verwenden zu können und deren direkten Export ins pdf-Format zu ermöglichen.

In einer lauffähigen Docker-Umgebung können die hier als komprimierte Archive bereit gestellten Pakete mit dem load-Befehl importiert werden:

docker load -i [name].tar.gz 
Gestartet werden die Images mit dem Befehl
docker run -p 8888:8888 [image-name]
Die Option -p 8888:8888 sorgt dafür, dass der Port 8888, den der Jupyter-Server im Docker-Container verwendet, auch auf der Wirtsmaschine unter der gleichen Port-Nummer sichtbar ist. Die Ausgabe zeigt die Grafik hier:

Die letzte gezeigte Zeile gibt die URL an, die in einen Web-Browser eingegeben werden muss, um sich mit dem Jupyter-Server zu verbinden.
Anmerkung: Die angegebenen Addressen gelten an sich nur innerhalb des Containers. Durch das Port-Mapping wird Port 88888 aber auch auf der lokalen Maschine mit der üblichen Addresse 127.0.0.1 sichtbar.

Eigene Daten im Container

Wenn ein Container lokal auf einem Rechner ausgeführt wird, können auch lokale Dateien in den Container eingebunden und mit den darin enthaltenen Applikationen bearbeitet werden. Dazu dient die Option
-v [lokales Verzeichnis]:[Verzeichnis im Container].
Damit wird ein sogenanntes Volume, d. h. ein persistener Datenspeicher im Container erzeugt, der die Dateien des Wirtssysytems bereitstellt.
Der vollständige Befehl zum Starten eines Datenanalyse-Containers mit Zugriff auf lokale Dateien des aktuellen Nutzers sieht also nun wie folgt aus:

docker run -p 8888:8888 -v [lokales Verzeichnis]:[Containerverzeichnis] --user "$(id -u):$(id -g)" [Image]

Ein konkretes Beispiel mit dem Container cgda und Dateien im aktuellen Verzeichnis (in der Umgebungsvariabelen PWD) des Nutzers mit der Nutzer-ID "$(id -u)" und der Gruppen-ID "$(id -g)", das im Container im Verzeichnis /home/dausr/wd eingebunden wird, sieht also folgendermaßen aus:

docker run -p 8888:8888 -v $PWD:/home/dausr/wd --user "$(id -u):$(id -g)" cgda

Anmerkung: Dateibezeichnungen im Container müssen auf der Kommandozeile als vollständige, absolute Pfade angegeben werden; dausr ist der vordefinierte Name für den Datenanalyse-User im Docker-Container.
Dateien, die dem Nutzer dausr im Container gehören, gehören auf der Wirts-Maschine dem Nutzer, der den Container gestartet hat und dessen Nutzer- und Gruppen-ID über den Linux-Befehl id -u bzw. id -d ermittelt wird. Dieser lokale Nutzer muss also Lese- und Schreibrechte im betreffenden Verzeichnis haben.

Docker unter MS Windows

Auch unter der neuesten Version von Microsoft Windows mit aktiviertem Windows Subsystem for Linux (WSL) kann Docker verwendet und vorbereitete Container ausgeführt werden, siehe Link zu Docker for Windows .

Die Einrichtung des WSL wird auf den Hilfe-Seiten von Microsoft erklärt, s. Windows-Subsystem für Linux: Installationsleitfaden für Windows 10. Wenn WLS aktiviert ist, muss noch ein Linux-System ausgewählt und installiert werden, z. B. die neueste Version von Ubuntu, z. Zt. 20.04. Nach der Aktvierung des WSL und der Istallation von Docker muss der aktuelle Nutzer vom Konto des Rechneradministrators aus in die Gruppe docker-users aufgenommen werden.
Unter Windows Professional geht dies über die Computerverwaltung->Nuzter und Gruppen.
In der Home-Editon von Windows muss man das allerdings auf der Kommandozeile in der mit Administratorrechten gestarteten Windows Powershell erledigen. Dazu folgenden Befehl eingeben:

 net localgroup docker-users "your-user-id" /ADD

Windows muss nun (wie leider oft üblich) neu gestartet weden, damit die Änderungen wirksam werden.

Die Bedienung von Docker erfolgt auch in Windows über die Kommandozeile. Starten Sie dazu das Programm Windows PowerShell und geben Sie die oben verwendeten Befehle ein, um ein Docker-Image zu laden

docker load -i [name].tar.gz 
und auszuführen
docker run -p 8888:8888 [image-name]

Wie unter Linux so wird auch hier die nach dem Start ausgegebene URL in einem Web-Browser Ihrer Wahl aufgerufen.

Zum Einbinden lokaler Verzeichnisse sollte man zunächst in der PowerShell durch Eingabe des Befehles wsl ins Linux-Subsystem und dort in das gewünschte Arbeitsverzeichnis wechseln und dann ein Docker-Image starten:
wsl
cd [workdir]
docker run -p 8888:8888 -v $PWD:/home/dausr/wd [image-name]
Anmerkung: Die Umgebungsvariable PWD enthält das aktuelle Arbeitsverzeichnis, das im Container unter dem Pfad /home/dausr/wd eingebunden wird. Die Angabe einer Nutzer-/Gruppen-ID ist nicht notwendig, weil das Windows Subsystem für Linux für jeden Nutzer einzeln eingereichtet wird bzw. werden muss.

Bereitgestellte Container

Unter diesem Download Link finden sich einige Docker-Images zur Datenauswertung in der Physik, die die in den Grundvorlesungen zur Rechnernutzung und in den Praktika benötigten Werkzeuge zur Verfügung stellen.


Wichtige Links:

Weitere Links: