Volumes und Mounts¶
Die Grundidee ist immer gleich: die Daten unserer Container - z.B. Webverzeichnis eines Webservers - müssen außerhalb vom Container gespeichert sein! Diese Ides bezeichnet man als Volumes.

Volumes und Bind Mounts¶
Volumes lassen sich unter Docker als Mounts oder Docker Volumes nutzen und können unterschiedlich erstellt und gebunden sein.
Docker Volumes¶
Eine Übersicht in Kürze: Link docs.docker.com - Storage - Volumes)
Wie der Name schon andeutet kümmert sich hier die Docker Technik um die Verwaltung der gewünschten Datenspeicher.
Die Konfiguration und Verdrahtung der Volumes kennt unterschiedliche Herangehensweisen.
Mit dem Docker Befehl
docker volume create ...
werden Docker Volumes manuell erzeugt und dann über den Schalter-v
den Docker Containern mitgeteilt.Mit der
Dockerfile
Direktive Volume kann man nur Volumes innerhalb des Containers erzeugen!Link docs.docker.com Reference Builder Volume
Beim
create
oderrun
für den Container kann man Mount-Points mit Parameter--mount
spezifizieren.Link docs.docker.com - Reference run - Volume mounts and Bind mounts
Mit der Docker Compose Direktive volumes:
In der
docker-compose.yml
werden echte Docker Volumes erzeugt und (persistent) nutzbar gemacht.
Nur echte Docker Volumes lassen sich mit docker volume ls
auflisten -
die Mounts sind hier nicht aufgelistet!
Die Volumes lassen sich wieder mit docker volume inspect ...
analysieren.
Die Volumes werden beim Löschen von Containern nicht mitgelöscht, was ja auch ganz im Sinne der technischen Nutzung ist (siehe Container als Wegwerfware bzw. Aktualisierung von Containern).
Verzeichnis für Volumes (bei Linux): /var/lib/docker/volumes
Hinweis zu Docker Compose
Wenn man mit docker-compose Container genutzt hat und dann beim docker-compose down noch den Schalter -v anhängt werden automatisch alle Volumes der docker-compose.yml gelöscht.
Backup für Volumes
Am Besten nutzen wir Docker Technik mit einem sehr einfachen Image in dessen Container wir das zu sichernde Volume und einen lokalen Ordner für das Sicherungsarchiv verdrahten.
Man sollte zuvor die Zugriffe auf das Volume stoppen.
docker run --rm \
-v "$VOLUME_NAME":/backup-volume \
-v "$(pwd)":/backup \
busybox \
tar -zcvf /backup/my-backup.tar.gz /backup-volume
Und dafür - und die Restores - haben sich diverse Skripte im Netz angesammelt.
Beispiel: GitHub Repo BretFischer/docker-vackup
Volumes beim Docker Desktop für Windows
Die Analyse von Docker Volumes bei Nutzung von Docker Desktop für Windows ist nach ganz so einfach, da die Verdrahtung der Docker Volumes im Windows WSL2 Subsystem manchmal mehr Analyse verlangt um die Ordnerstruktur für die Volumes zu finden.
Beispiel eines Standard Docker Volume für eine Portainer Datenstruktur unter Linux:
/var/lib/docker/volumes/portainer_data/_data/
(Volume: portainer_data)
Dasselbe Portainer Volume portainer_data
auf einem
Docker Desktop für Windows Volume:
\\wsl.localhost\docker-desktop-data\data\docker\volumes\portainer_data\_data
Trick für Docker Desktop für Windows mit WSL2:
Einhängen (hier Debian WSL2 Machine) mit einem Docker Container basierend auf Debian Image: (nsenter ruft Shell sh in anderem Namensraum auf)
docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -i sh
Jetzt lässt sich eine Volume Technik direkt mit dem Standardpfad
/val/lib/docker/volumes/...
aufrufen!
Bind Mounts¶
Eine Übersicht in Kürze: Bind Mounts (Link docs.docker.com - Storage - Bind Mounts)
Die Daten liegen außerhalb des Container in der
Verzeichnisstruktur des Docker Hosts - z.B.
-v /var/dc-test-www:/var/www/html
.
Der Parameter -v
kündigt die Zuweisung an.
Links vom :
ist das lokale Verzeichnis /var/dc-test-www
und rechts der Standardordner /var/www/html
des Containerservice
(hier Webserver Apache2) zu finden.