Rückblick
Im ersten Teil wurde ein kleines, einfaches, mit Docker erstelltes Lab vorgestellt. Unter /var/lib/docker/volumes/[volume-id]/_data findet sich das erzeugte Pseudologfile „date.txt“.
Was aber, wenn ich die in meinem Container erzeugten Daten an einem bestimmten Ort abgelegt haben möchte, zB.:
- um sie automatisiert zu sichern oder wegzukopieren
- einen einfach Zugriff auf diese zu haben (zB. in meinem Homeverzeichnis)
- unkompliziert weitere Daten in den Container laden möchte, NACHDEM ich das Docker Image erzeugt habe*
Gut kennt Docker Bind-Mounts!
Anm.: Daten zwischen Container und Gastsystem können zur Container Laufzeit ausgetauscht werden. Man muss nur in das Verzeichnis /var/lib/docker/volumes/[volume-id]/_data wechseln. Also so etwas wie: /var/lib/docker/volumes/02636ea81a247dd1d90c68f3babb18001672329317
9fbecb66a5e18d33ffdca5/_data. Ich denke das Problem ist damit bereits beschrieben.
Bind Mounts
Der Bind Mount kopiert den Inhalt des Targetverzeichnis im Container in ein lokales Verzeichnis (source). Das Targetverzeichnis ist in diesem Fall der Ordner im Container, der das Pseudologfile date.txt beinhaltet.
Wichtig: das lokale Verzeichnis muss existieren:
mkdir $HOME/labvol
sudo docker run \
-d --mount type=bind,source=$HOME/labvol,target=/var/lab mylab -loop
CONTAINER=`sudo docker ps| grep mylab | head -n1 |awk {'print $NF}'`
Nun kann auf die im Container produzierten Daten über das lokale Verzeichnis $HOME/labvol zugegriffen werden.
Datenaustausch
Aber das Beste ist: die Daten werden nicht nur vom Container zum lokalen Verzeichnis kopiert, sondern auch vice-versa. Ich kann also bequem Daten vom lokalen Filesystem dem Container zur Verfügung stellen.
Ich erstelle in meinem Bind-Mount $HOME/labvol das File local-file.txt
cd $HOME/labvol
~/labvol$ touch local-file.txt
~/labvol$ ls -rtl
total 12
-rw-rw-r-- 1 pascal pascal 0 Mai 17 16:24 local-file.txt
-rw-r--r-- 1 root root 11485 Mai 17 16:24 date.txt
Nun connecte ich den laufenden Container und kontrolliere das Container-Verzeichnis /var/lab:
sudo docker exec -it $CONTAINER /bin/bash
root@b49611d6d6ab:/opt/lab# cd /var/lab
root@b49611d6d6ab:/var/lab# ls -rtl
total 16
-rw-rw-r-- 1 1000 1000 0 May 17 14:24 local-file.txt
-rw-r--r-- 1 root root 12471 May 17 14:29 date.txt
Et voilà: local-file.txt ist im Container vorhanden.
Have Fun!
Weiterführende Ressourcen
https://docs.docker.com/storage/bind-mounts/