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.gzGestartet 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.gzund 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.
- cgda Computergestütze Datenauswertung
mit numpy, scipy, matplotlib, uncertainties, kafe2, PhyPraKit, pandas, vector. - da-root Computergestütze Datenauswertung mir Root;
wie cgda plus Datenanalyse-Framework Root. Da die grafische Ausgabe von Root-Macros in der aktuellen Version von jupyter mit jupter-lab nicht mehr funktioniert, nutzt dieser Container ein jupyter notebook. - da-full Computergestütze Datenauswertung mit
Root und LaTeX;
wie da-root plus LaTeX zum pdf-Export von Notebooks.
Wichtige Links:
- Download Link zu den hier bereit gestellten Containern und Docker-Files
- Dockerfiles zum Bau der Container auf dem Server Jupytermachine der Fakultät für Physik.