docker / Anleitungen

Docker-Volume oder Bind-Mount: Was passt besser?

Wähle nach Datenablage und Arbeitsablauf. Docker verwaltet Volumes; ein Bind-Mount stellt dem Container einen konkreten Host-Pfad bereit.

Die Beispiele verwenden Bash; beachte die Referenzen für Einzelheiten deiner Umgebung.

docker — Spickzettel

Speichermodelle vergleichen

FrageBenanntes VolumeBind-Mount
Wer bestimmt den Speicherort?Docker verwaltet ihn.Du gibst einen Host-Pfad an.
Typischer EinsatzPersistente Anwendungsdaten.Quellcode oder Host-Konfiguration.
Auf einem neuen Host?Volume erstellen oder wiederherstellen.Pfad und Dateien bereitstellen.

Beide können das Entfernen eines Containers überstehen. Keines ist automatisch ein Backup. Bei einem entfernten Docker-Daemon liegt die Bind-Quelle auf dessen Host, nicht unbedingt auf deinem Rechner.

Persistenz mit einem Volume beobachten

Wähle einen neuen Volume-Namen. Beim ersten Lauf wird möglicherweise das Alpine-Image für die Übung heruntergeladen.

docker volume create devsheet-volume-demo
docker run --rm --mount type=volume,source=devsheet-volume-demo,target=/data alpine:3.22 sh -c "echo hello > /data/note.txt"
docker run --rm --mount type=volume,source=devsheet-volume-demo,target=/data alpine:3.22 cat /data/note.txt

Erwartet wird hello beim zweiten Lauf. --rm hat den ersten Container entfernt, aber das ausdrücklich benannte Volume behält die Datei. Das Volume bleibt bis zu seiner bewussten Löschung bestehen.

Ein Host-Verzeichnis schreibgeschützt einbinden

Erstelle in Bash ein neues Übungsverzeichnis. Bei dieser Mount-Syntax muss die Quelle bereits vorhanden sein.

mkdir devsheet-bind-demo
printf "hello\n" > devsheet-bind-demo/note.txt
docker run --rm --mount "type=bind,source=$(pwd)/devsheet-bind-demo,target=/data,readonly" alpine:3.22 cat /data/note.txt

Erwartet wird hello aus der Host-Datei. readonly verhindert Schreibzugriffe über diesen Mount. Docker Desktop benötigt möglicherweise eine Freigabe für das Verzeichnis. Das Host-Verzeichnis bleibt bestehen.

Mounts und Backups prüfen

Ein Mount über einem nicht leeren Container-Verzeichnis verdeckt dessen bisherige Inhalte für die Dauer des Mounts. Prüfe den Pfad im Abschnitt Mounts von docker inspect <container>.

Ein beschreibbarer Bind-Mount erlaubt Änderungen an den betreffenden Host-Dateien. Begrenze das freigegebene Verzeichnis. Verwende für Datenbanken geeignete Backups; das Kopieren laufend genutzter Dateien ohne Konsistenzprüfung reicht nicht aus.

Referenzen

Alle Anleitungen