Zum Hauptinhalt springen

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 />

index.html


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.

index.html


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