User Tools

Site Tools


docker:jupyter

Eigenes Jupyter Notebook

Dieser Artikel beschreibt das Vorgehen, wie man sein eigenes Jupyter Notebook mit eigenen Abhängigkeiten bauen kann.

Des Weiteren wird auch ein lokales Verzeichnis zur Datenhaltung eingebunden.

Vorbereitung

Verzeichnis erstellen

admin@docker# mkdir -p ~/docker/jupyter

und das 'data' Verzeichnis

admin@docker# mkdir -p ~/docker/jupyter/data
admin@docker# cd ~/docker/jupyter

Anlegen des 'Dockerfiles' aus dem dann das Image gebaut wird

admin@docker# vi Dockerfile

Inhalt

compose.yaml
FROM python:latest
 
WORKDIR /data
 
RUN --mount=type=bind,source=requirements.txt,target=/tmp/requirements.txt \
  pip install --no-cache-dir -r /tmp/requirements.txt
 
EXPOSE 8888
 
ENV NAME="Jupyter World"
 
CMD ["jupyter", "notebook", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root"]

Für die benötigten python Module wird die Datei 'requirements.txt' angelegt

admin@docker# vi requirements.txt
requirements.txt
jupyter
numpy
scipy

Image und Container erstellen

Wenn jetzt alles erledigt ist, dann können wir das 'docker Image' bauen

admin@docker# sudo docker build -t notebook:v0.1 .

Überprüfen, ob das Image erstellt wurde

admin@docker# sudo docker images | grep notebook
notebook              v0.1      7dbd372643f5   2 hours ago     1.48GB

Mit diesem Image lässt sich jetzt der Container erstellen

admin@docker# sudo docker run --name notebook -v ./data:/data -p 8888:8888 notebook:v0.1

Überprüfen, ob der Container gestartet wurde

admin@docker# sudo docker ps -f name=notebook
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                       NAMES
80a988b80262   notebook:v0.1   "jupyter notebook --…"   37 minutes ago   Up 37 minutes   0.0.0.0:8888->8888/tcp, :::8888->8888/tcp   notebook

In der Ausgabe sollte eine URL angezeigt werden, mit der man sich mit diesen Container verbinden kann.

http://127.0.0.1:8888/tree?token=302f35ec799a314d946d529f87aec87b0ff224c71e3e9c4b

Sollte dieses Setup nicht auf dem lokalen Rechner ausgeführt worden sein, muss die URL entsprechend angepasst werden,

e.g: http://raspi64-04:8888/tree?token=302f35ec799a314d946d529f87aec87b0ff224c71e3e9c4b

Eigenes Passwort statt Token

Um ein eigenes Passwort zu vergeben, muss man sich auf die Shell des Containers begeben

admin@docker# sudo docker exec -it notebook /bin/bash

root@80a988b80262:/data# jupyter notebook password
Enter password: 
Verify password: 
[JupyterPasswordApp] Wrote hashed password to /root/.jupyter/jupyter_server_config.json

Anschließend kann man sich wieder ausloggen und die erzeugte Datei herunterladen

admin@docker# sudo docker cp notebook:/root/.jupyter/jupyter_server_config.json .
Successfully copied 2.05kB to /home/stefan/docker/jupyter/.

Jetzt sollte das Verzeichnis folgendermaßen aussehen

admin@docker# ll
drwxr-xr-x 2 admin admin 4096 18. Mär 17:06 data
-rw-r--r-- 1 admin admin  302 18. Mär 17:07 Dockerfile
-rw------- 1 admin admin  162 18. Mär 17:52 jupyter_server_config.json
-rw-r--r-- 1 admin admin   21 18. Mär 17:08 requirements.txt

Dockerfile editieren

compose.yaml
FROM python:latest
 
WORKDIR /data
 
RUN --mount=type=bind,source=requirements.txt,target=/tmp/requirements.txt \
  pip install --no-cache-dir -r /tmp/requirements.txt
 
### DIESE ZEILE EINFÜGEN ###
COPY jupyter_server_config.json /root/.jupyter/
 
EXPOSE 8888
 
ENV NAME="Jupyter World"
 
CMD ["jupyter", "notebook", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root"]

Nach dieser Änderung muss der Container gestoppt und gelöscht werden

admin@docker# sudo docker stop notebook
admin@docker# sudo docker rm notebook

Jetzt ist es an der Zeit, ein neues Image zu bauen

admin@docker# sudo docker build -t notebook:v0.2 .

Anschließend der Container

admin@docker# sudo docker run --name notebook -v ./data:/data -p 8888:8888 notebook:v0.2

Die Url sollte jetzt ohne 'Token' in der Ausgabe stehen

Auch hier gilt wieder, dass die URL evtl. angepasst werden muss

http://127.0.0.1:8888/tree

Wenn alles richtig war, sollte nur noch ein Passwrtfeld auf der Webseite zu sehen sein.

docker/jupyter.txt · Last modified: by stefan

Page Tools