Eigene Docker Images bauen und bereitstellen

Es kann vorkommen, dass die Standard-Profile nicht die Pakete enthalten, die Sie benötigen. Um eigene Pakete in Form eines eigenen Docker Images bereitzustellen, sind die folgenden vier Schritte notwendig:
  1. Die Software Docker lokal installieren.
  2. Ein Dockerfile erstellen.
  3. Das Docker Image bauen.
  4. Eine Container Registry auswählen und das Docker Image hochladen.

 

Docker installieren

Mithilfe von Docker kann man Anwendungen in sog. Containern laufen lassen. Der große Vorteil: Man muss die Anwendung und deren Abhängigkeiten nicht mehr manuell direkt auf der Maschine installieren, sondern kann einen Container starten. Der Container basiert auf einem sog. Docker Image, das bereits die installierte Anwendung enthält.

Profile, die über bwJupyter gestartet werden, werden als Container gestartet. Daher kann man eigene Docker Images nutzen, um die Jupyter-Umgebung anpassen zu können.

Sie können Docker über Docker Desktop verwenden. Die Installationsanweisungen sind abhängig vom verwendeten Betriebssystem. Die konkreten Schritte und Anweisungen finden Sie in der Docker-Dokumentation.

Hinweis: Da es sich um Virtualisierungssoftware handelt, ist die Installation teilweise komplexer und aufwendiger im Vergleich zu herkömmlicher Software.

 

Dockerfile erstellen

Nachdem Docker erfolgreich installiert wurde, können Sie das Dockerfile erstellen. Das Dockerfile ist eine Datei mit dem Namen Dockerfile ohne Dateiendung. Diese Datei enthält alle Anweisungen für eine ausführbare JupyterLab-Umgebung. Damit Sie die JupyterLab-Software nicht selbst innerhalb Ihres Dockerfiles installieren müssen, können Sie auf ein sog. Base Image aufbauen. Sie finden eine Liste möglicher Base Images in der Jupyter-Dokumentation.

Hinweis: Geben Sie falls vorhanden die aktuelle JupyterHub-Version 5.2.1 in dem Tag des Base Images an.

Im Folgenden nutzen wir das Datascience Image und installieren zusätzlich das Python-Paket cowsay. Dazu legen wir die Datei Dockerfile (ohne Dateiendung) an und fügen den folgenden Inhalt ein.

FROM quay.io/jupyter/datascience-notebook:hub-5.2.1
RUN pip install cowsay==6.1

Wenn Sie komplexere Pakete installieren möchten, die System-Abhängigkeiten benötigen, können Sie im Dockerfile auch Befehle als root-Nutzer ausführen. Wichtig ist nur, dass Sie am Ende wieder zum Nutzer jovyan wechseln. Das folgende Dockerfile installiert den Prozessmanager htop.

FROM quay.io/jupyter/datascience-notebook:hub-5.2.1
USER root

# Install htop
RUN apt-get update --yes && \
    apt-get install --yes --no-install-recommends \
    htop \
    apt-get clean && rm -rf /var/lib/apt/lists/*

USER jovyan

Weiter Informationen zu Dockerfiles finden Sie in der Docker-Dokumentation.

Hinweise:

  • Der Ordner /home/jovyan/work wird nach dem Start des Containers mit dem persönlichen Verzeichnis der Nutzenden überschrieben. Wenn Sie Dateien mit Studierenden teilen möchten, nutzen Sie hierfür den geteilten Ordner __shared/.
  • Bitte laden Sie keine großen Dateien ins Dockerfile. Verwenden Sie stattdessen den geteilten Ordner innerhalb des Profils.
  • Wenn Sie eigene Docker Images bereitstellen, sind Sie dafür verantwortlich, dass Sie keine bösartigen Pakete oder Software installieren. Stellen Sie sicher, dass die Pakete einen sicheren Ursprung haben und Sie dem Ursprung vertrauen.

 

Docker Image bauen

Nachdem Sie das Dockerfile angelegt haben, können Sie es zu einem Docker Image bauen. Dafür müssen Sie lediglich den Befehl docker build in dem Verzeichnis des Dockerfiles ausführen. 

docker build -t bwjupyter-profile .

 

Container Registry auswählen und Docker Image bereitstellen

Im letzten Schritt müssen Sie das Docker Image bereitstellen, sodass bwJupyter es herunterladen und verwenden kann. Dazu müssen Sie sich zunächst eine sog. Container Registry auswählen, die Ihr Image bereitstellen soll. Im Folgenden werden die gängigsten Container Registries aufgelistet.

Container Registry Einführung Bemerkungen
Docker Hub Build and push an image to Docker Hub DockerHub erlaubt ein kostenloses privates Docker Image.
GHCR (GitHub Container Registry) Working with the Container registry Anstelle des Passwort sollte für das Pullen eines privaten Docker Images ein Token (Scope "write:packages") verwendet werden.
quay.io Getting Started with Quay.io Quay.io erlaubt keine kostenlose privaten Docker Images.
GitLab CR (GitLab Container Registry) Build and push container images to the container registry  

Nachdem Sie eine Container Registry ausgewählt haben, müssen Sie sich mit dem Befehl docker login anmelden. Danach müssen Sie Ihr gebautes Image umbenennen (taggen), sodass die Container Registry enthalten ist (docker tag). Abschließend können Sie das umbenannte Image mit dem Befehl docker push hochladen (pushen).

Weitere Hinweise:

  • Informieren Sie sich, ob Ihre Institution ggf. bereits eine eigene Container Registry betreibt, die Sie nutzen können.
  • Aktuell müssen die Docker Images öffentlich und ohne Anmeldung verfügbar sein. Wir arbeiten bereits an einer Lösung, um auch private Docker Images verwenden zu können.