Volume
Container sind „ephemeral“: Wenn du einen Container löschst, sind seine Daten weg – außer sie liegen außerhalb des Container-Filesystems.
Vorbereitung (Demo)
Ordnerstruktur:
example/
├── docker-compose.yml
└── page/ # Mounted Folder
└── index.html # Custem Page
Beispiel: page/index.html
<h1>Volume example</h1>
<hr />
Named Volumes (von Docker verwaltet)
Named Volume = Docker verwaltet Speicherort & Lifecycle des Volumes. Perfekt für Persistenz (DB, Grafana, Jenkins, etc.) und Production.
Docker single container
docker run \
-d \
--name nginx-app \
-p 80:80 \
-v page_data:/usr/share/nginx/html:ro \
nginx:latest
Docker Compose setup
services:
nginx:
image: nginx:latest
container_name: nginx-app
ports:
- "80:80"
volumes:
- page_data:/usr/share/nginx/html:ro
volumes:
page_data:
Bind Mounts (Host ↔ Container)
Bind Mount Development, weil Änderungen sofort im Container sichtbar sind.
Volume wird von Docker selbst verwaltet
Docker (Single Container)
docker run \
-d \
--name nginx-app \
-p 80:80 \
-v ${PWD}/page:/usr/share/nginx/html:ro \
nginx:latest
Docker Compose
services:
nginx:
image: nginx:latest
container_name: nginx-app
ports:
- "80:80"
volumes:
- ${PWD}/page:/usr/share/nginx/html:ro
Jetzt in der page/index.html den inhalt ändern.
<h1>Bind Volume Example</h1>
<hr />
<article>Meine lokale anpassung</article>
Änderung speichern und die Seite im Browser neu laden F5 zeigt die direkte verbindung in den Container.

Bonus: Read-only mounts (Sicherheit)
Wenn du nur Dateien ausliefern willst (z.B. HTML), nutze :ro:
-v ./page:/usr/share/nginx/html:ro
Das verhindert, dass der Container deine Host-Dateien überschreibt.
Volume Management
Volumes anzeigen
docker volume ls
Details eines Volumes
docker volume inspect page_data
Volume löschen
docker volume rm page_data
Nicht genutzte Volumes aufräumen
docker volume prune