Skip to content

Docker Volumes

Kurzdefinition

Docker Volumes sind von Docker verwaltete Speicherbereiche, die außerhalb des Containers liegen und eine dauerhafte Datenspeicherung (Persistenz) ermöglichen.


Das zentrale Problem (Prüfungs-Klassiker!)

❗ Problem: Flüchtige Container

flowchart LR
    A[Container läuft] --> B[Daten werden gespeichert]
    B --> C[Container wird gelöscht]
    C --> D[Daten sind verloren ❌]
  • Container sind ephemeral (flüchtig)
  • Daten im Container gehen beim Löschen verloren

Lösung: Docker Volumes

flowchart LR
    A[Container] --> B[Volume]
    B --> C[Host-System]
    C --> B
  • Daten liegen außerhalb des Containers
  • bleiben erhalten, auch wenn:
  • Container gestoppt wird
  • Container gelöscht wird

Eigenschaften von Docker Volumes

  • persistente Speicherung (Daten bleiben erhalten)
  • von Docker verwaltet
  • unabhängig vom Container-Lebenszyklus
  • mehrere Container können dasselbe Volume nutzen
  • ideal für:
  • Datenbanken
  • Logs
  • Uploads
  • Konfigurationsdateien

Verwendung von Volumes

Volume erstellen

docker volume create my_volume

Volume verwenden (Container starten)

docker run -d -v my_volume:/data my_image

Bedeutung: - my_volume = Volume auf Host - /data = Pfad im Container


Volumes verwalten

Befehl Beschreibung
docker volume ls alle Volumes anzeigen
docker volume inspect <name> Details anzeigen
docker volume rm <name> Volume löschen

Alternative: --mount (moderner Syntax)

docker run -d \
  --mount type=volume,source=my_volume,target=/data \
  my_image

Vorteil: - expliziter und besser lesbar - bevorzugt in komplexeren Setups


Vergleich: 3 Lösungen für das Datenproblem

Lösung Beschreibung Bewertung
docker cp manuelles Kopieren von Daten ❌ unpraktisch
Bind Mount Host-Verzeichnis direkt einbinden ⚠️ gut für Dev
Docker Volume Docker verwalteter Speicher ✅ beste Lösung

1. docker cp (nicht skalierbar)

docker cp container:/data ./backup
  • nur manuell
  • fehleranfällig
  • nicht automatisiert

nur für Debugging geeignet


2. Bind Mount

docker run -v /host/data:/container/data my_image

Vorteile: - direkter Zugriff auf Host-Dateien

Nachteile: - abhängig vom Host-System - weniger portabel - Sicherheitsrisiken

gut für Entwicklung


3. Docker Volumes (Best Practice)

docker run -v my_volume:/data my_image

Vorteile: - Docker verwaltet Speicher - portabel - sicherer - einfach zu nutzen

Standardlösung in Produktion


Verwendung im Dockerfile

VOLUME ["/data"]

⚠️ Wichtig: - definiert nur einen Mount-Punkt - erstellt kein Volume automatisch beim Build - Volume wird erst beim Start genutzt


Praxis-Szenario (Prüfung!)

Situation:

  • 1000 User registrieren sich
  • Daten werden im Container gespeichert
  • Container wird gelöscht

Ergebnis ohne Volume: → alle Daten weg ❌


Lösung:

docker run -v my_volume:/data my_app

Ergebnis: - Daten bleiben erhalten ✅ - neuer Container kann weiterarbeiten


Backup & Restore eines Named Volumes

Backup erstellen

docker run --rm \
  -v my_volume:/data \
  -v "$PWD":/backup \
  alpine sh -c "tar czf /backup/my_volume_backup.tgz -C /data ."

Backup zurueckspielen (Restore)

docker run --rm \
  -v my_volume:/data \
  -v "$PWD":/backup \
  alpine sh -c "tar xzf /backup/my_volume_backup.tgz -C /data"

Nutzen: - wichtig vor Updates/Migrationen - schnell fuer lokale Sicherungen


Volumes in Docker Compose

services:
  db:
    image: postgres:16
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

Hinweis: - db_data bleibt erhalten, auch wenn der Container neu erstellt wird


Aufraeumen (mit Vorsicht)

docker volume ls
docker volume prune

Hinweis: - docker volume prune loescht ungenutzte Volumes - vorher immer pruefen, ob wichtige Daten enthalten sind


Prüfungsrelevanz (AP1)

Typische Fragen + Antworten

Warum braucht man Volumes?
→ um Daten dauerhaft zu speichern

Was passiert ohne Volume?
→ Daten gehen beim Löschen verloren

Unterschied Bind Mount vs Volume?
→ Volume = Docker verwaltet, Bind Mount = Host abhängig

Wie bindet man ein Volume ein?
-v volume:/pfad oder --mount


Häufige Fehler

❌ Typische Probleme

  • Daten im Container speichern statt im Volume
  • falscher Mount-Pfad
  • Volume nicht verwendet → Datenverlust
  • Bind Mount in Produktion ohne Verständnis

Best Practices

  • immer Volumes für persistente Daten nutzen
  • für Produktion → Docker Volumes bevorzugen
  • für Entwicklung → Bind Mount ok
  • klare Trennung: Code vs Daten

Zusammenfassung

  • Container = flüchtig
  • Volumes = dauerhaft

Ohne Volume: → Datenverlust

Mit Volume: → persistente Speicherung + Wiederverwendbarkeit

Merksatz (Prüfung):
"Ohne Volume sind Container zustandslos (stateless)"