Warum brauche ich Docker Volumes?
Container sind ephemer – sie speichern keine dauerhaften Daten. Wird ein Container entfernt (docker rm), sind alle Dateiänderungen verloren. Für Datenbanken, Uploads und Konfigurationen braucht man persistenten Speicher.
Die drei Speicheroptionen
| Typ | Pfad | Verwaltet von | Einsatz |
|---|---|---|---|
| Named Volume | Docker-intern | Docker | Datenbanken, App-Daten |
| Bind Mount | Host-Pfad | OS | Entwicklung, Konfig-Dateien |
| tmpfs Mount | RAM | Kernel | Secrets, temporäre Dateien |
Named Volumes (empfohlen für Produktion)
# Volume erstellen
docker volume create meine-daten
# Container mit Volume starten
docker run -d \
--name postgres \
-v meine-daten:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=geheim \
postgres:16
# Volumes anzeigen
docker volume ls
# Volume inspizieren (zeigt Host-Pfad)
docker volume inspect meine-daten
# Ungenutzte Volumes löschen
docker volume prune
Named Volumes liegen unter /var/lib/docker/volumes/ und werden von Docker verwaltet.
Bind Mounts
# Absoluter Host-Pfad → Container-Pfad
docker run -d \
--name nginx \
-v /opt/meine-app/html:/usr/share/nginx/html:ro \
nginx:alpine
# Mit Docker Compose:
services:
app:
image: myapp:latest
volumes:
# Bind Mount (absoluter Pfad)
- /etc/myapp/config.yaml:/app/config.yaml:ro
# Named Volume
- app-data:/app/data
# Relativer Pfad (zum Compose-Verzeichnis)
- ./nginx.conf:/etc/nginx/nginx.conf:ro
volumes:
app-data:
tmpfs – Flüchtiger RAM-Speicher
# Für Secrets die nicht auf Disk landen sollen
docker run -d \
--name myapp \
--tmpfs /run:rw,noexec,nosuid,size=100m \
--tmpfs /tmp \
myapp:latest
Volume-Backup
# Named Volume sichern
docker run --rm \
-v meine-daten:/source:ro \
-v /backup:/backup \
alpine tar czf /backup/meine-daten-$(date +%Y%m%d).tar.gz -C /source .
# Volume wiederherstellen
docker run --rm \
-v meine-daten:/restore \
-v /backup:/backup:ro \
alpine tar xzf /backup/meine-daten-20250101.tar.gz -C /restore
Volume zu neuem Host migrieren
# Auf Quell-Host: exportieren
docker run --rm -v meine-daten:/data -v /tmp:/backup \
alpine tar czf /backup/migration.tar.gz -C /data .
scp /tmp/migration.tar.gz ziel-server:/tmp/
# Auf Ziel-Host: importieren
docker volume create meine-daten
docker run --rm -v meine-daten:/data -v /tmp:/backup \
alpine tar xzf /backup/migration.tar.gz -C /data
Volume-Treiber (NFS, S3)
# NFS-Volume
docker volume create \
--driver local \
--opt type=nfs \
--opt o=addr=192.168.1.100,rw \
--opt device=:/nfs/share \
nfs-daten
FAQ
Named Volume oder Bind Mount für Produktion?
Named Volumes für Produktion – Docker kümmert sich um Pfade und Berechtigungen. Bind Mounts für Entwicklung – direkter Zugriff auf Quellcode.
Werden Volumes bei docker-compose down gelöscht?
Nein. docker-compose down entfernt Container und Netzwerke, aber keine Volumes. Mit docker-compose down -v werden auch Volumes gelöscht.
Fazit
Named Volumes sind der empfohlene Weg für persistente Daten in Produktion. Mit regelmäßigen Volume-Backups schützen Sie Ihre Container-Daten zuverlässig.
Container-Infrastruktur für KMU in Heidelberg, Mannheim und der Rhein-Neckar-Region. Beratung anfragen.