CargoshipFoto von David Dibert von Pexels

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/

Schreibe einen Kommentar