- 1 Section
- 10 Lessons
- unbegrenzt
- Docker & Container10
- 1.1Container vs. VM
- 1.2Docker-Architektur: Client, Daemon, Registry
- 1.3Images und Container: pull, run, stop, rm
- 1.4Dockerfile – eigene Images bauen
- 1.5Volumes: persistente Daten
- 1.6Netzwerke in Docker: bridge, host, overlay
- 1.7Docker Compose: Multi-Container-Anwendungen
- 1.8Docker in der CI/CD-Pipeline
- 1.9Sicherheit in Docker-Umgebungen
- 1.10Aufgaben Docker
Volumes: persistente Daten
Container sind nach Design flüchtig. Sie werden gebaut, gestartet, irgendwann gestoppt und gelöscht – und mit ihnen verschwinden alle Daten, die im Container-Filesystem geschrieben wurden. Das ist gut so, denn es macht Container reproduzierbar und einfach zu skalieren. Aber: Reale Anwendungen erzeugen Daten, die nicht verschwinden dürfen – Datenbank-Inhalte, hochgeladene Dateien, generierte Reports. Dafür gibt es Volumes: einen Mechanismus, mit dem Daten über den Container-Lebenszyklus hinaus erhalten bleiben. Wer Volumes nicht versteht, verliert früher oder später Produktionsdaten. Diese Lektion macht aus dieser Falle ein bewusstes Werkzeug.
Die Analogie ist ein Hotelzimmer: Wenn du auscheckst (Container wird gelöscht), wird das Zimmer aufgeräumt – deine Wäsche, deine Zahnbürste, deine Notizen sind weg. Was bleibt, ist dein Schließfach im Tresor in der Lobby (Volume): unabhängig vom Zimmer, persistent. Du kannst nächste Woche in ein anderes Zimmer einchecken (neuer Container) und dein Schließfach ist immer noch da.
1) Das Problem: was passiert ohne Volume?
Schau dir den Lebenszyklus eines Containers mit und ohne Volume direkt im Vergleich an. Du siehst, warum Volumes für jede Anwendung mit persistenten Daten Pflicht sind:
docker rm bedeutet ohne Volume: alles weg, kein Backup im Container-Filesystem.2) Drei Volume-Typen im Vergleich
Docker kennt drei Mechanismen, um Daten außerhalb des Containers zu speichern. Sie unterscheiden sich grundlegend in Verwaltung, Portabilität und Einsatzgebiet:
1. Named Volume
docker run -v data-vol:/var/lib/dbDocker-verwaltetes Volume mit Namen. Wird auf dem Host unter /var/lib/docker/volumes/ angelegt – Pfad ist Docker-intern, du musst dich nicht drum kümmern.
- ✓ Portabel, OS-unabhängig
- ✓ Von Docker verwaltet (Backup, Prune)
- ✓ Volumetreiber (lokal, NFS, Cloud)
- ✗ Pfad auf Host schwerer manuell zugänglich
2. Bind Mount
docker run -v /etc/conf:/etc/confKonkretes Host-Verzeichnis wird in den Container gemountet. Du kontrollierst den Pfad selbst.
- ✓ Direkter Host-Zugriff, mit Editor änderbar
- ✓ Perfekt für Dev (Live-Code-Reload)
- ✓ Config-Dateien einschleusen
- ✗ Host-pfad-abhängig (Windows ≠ Linux)
- ✗ Sicherheitsrisiko bei sensiblen Pfaden
3. tmpfs
docker run --tmpfs /tmp:size=100MRAM-basierter Mount, kein Disk-Storage. Daten leben nur, solange der Container läuft.
- ✓ Sehr schnell (RAM-Zugriff)
- ✓ Sensible Daten landen nicht auf Disk
- ✗ NICHT persistent – Restart = weg
- ✗ Verbraucht RAM
3) Named Volumes im Detail
Named Volumes sind der empfohlene Standard für produktive Anwendungsdaten. Sie sind portabel, von Docker verwaltet und einfach zu sichern. Hier eine komplette Sitzung mit Anlegen, Befüllen, Inspektion und Aufräumen:
docker volume prune löscht alle ungenutzten Volumes – ein zweischneidiges Werkzeug, das man nur bewusst einsetzen sollte.4) Bind Mounts – Code-Sharing für Entwicklung
Bind Mounts sind das Werkzeug der Wahl in Entwicklungsumgebungen. Klassisches Setup: Du editierst Code auf deinem Laptop, der Container sieht die Änderungen sofort – ohne dass du das Image neu bauen musst. Sehr produktiv, aber für Produktion nicht geeignet (Host-Pfad-Abhängigkeit, Sicherheit).
/etc/passwd, /var/run/docker.sock) gilt: niemals in Bind-Mounts geben – das ist eine der häufigsten Container-Eskalations-Schwachstellen, siehe Docker-Sicherheit.5) Anonymous Volumes und VOLUME-Anweisung
Es gibt eine vierte Variante, die häufiger ist, als man denkt: Anonymous Volumes. Sie entstehen automatisch, wenn ein Image im Dockerfile eine VOLUME-Anweisung hat. Beispiel: Das offizielle Postgres-Image hat VOLUME /var/lib/postgresql/data drin – wenn du den Container ohne -v startest, legt Docker trotzdem ein anonymes Volume an. Das ist gut (Daten sind nicht im Container-FS), aber gefährlich: Das Volume hat einen zufälligen Hash-Namen, und beim Container-Restart bekommst du leicht ein neues.
Konsequenz: immer explizit ein Named Volume oder Bind Mount mappen, niemals auf das Anonymous Volume vertrauen. Probier es aus:
docker volume prune ein wichtiger Maintenance-Befehl: er löscht alle Volumes, die nicht mehr von einem Container referenziert werden. Aber Vorsicht – wer das in einer Datenbank-Umgebung ohne Backup ausführt, kann sich von wertvollen Daten verabschieden. Mehr zur Datensicherung in Backup-Arten.6) Volumes mit Containern teilen
Ein Volume kann von mehreren Containern gleichzeitig genutzt werden – sehr nützlich für Sidecar-Patterns, Log-Sammler oder Web/Worker-Setups. Beispiel: Ein Web-Container schreibt Uploads in ein Volume, ein Worker-Container liest aus demselben Volume und verarbeitet die Dateien:
7) Storage-Treiber und Cloud-Volumes
Standardmäßig legt Docker Named Volumes als lokale Verzeichnisse auf dem Host an (Treiber local). Aber es gibt austauschbare Volume Driver für andere Backends:
| Treiber | Storage | Einsatz |
|---|---|---|
local | Host-Filesystem | Standard, Single-Host-Setups |
local-persist | Host, persistenter Pfad | Mehr Kontrolle als Standard-local |
nfs / cifs | Netzwerk-Share | Volume auf NAS, mehrere Hosts |
rexray / flocker | Cluster-Storage | Container-Migration zwischen Hosts |
aws-ebs, azure-disk, gce-pd | Cloud-Block-Storage | Container in der Cloud, persistente Daten |
In Kubernetes-Setups wird das Konzept generalisiert zu PersistentVolumes und PersistentVolumeClaims – die Anwendung deklariert, was sie braucht (z. B. „10 GB SSD"), das Cluster sucht passendes Volume. Diese Abstraktion ist eine der mächtigsten Eigenschaften moderner Container-Orchestrierung, weil sie Anwendung und Storage entkoppelt – die App weiß nicht, dass ihre Daten auf AWS EBS, Azure Managed Disk oder lokalem NFS liegen.
Zusammenfassung
Container-Filesysteme sind flüchtig – beim Löschen sind alle Daten weg. Volumes sind der Mechanismus für persistente Daten. Drei Typen: Named Volume (von Docker verwaltet, portabel, Standard für Produktion), Bind Mount (konkretes Host-Verzeichnis, ideal für Dev und Config-Files), tmpfs (RAM-basiert, nicht persistent, schnell). Befehle: docker volume create/ls/inspect/rm/prune; Mount-Syntax: -v name:/pfad für Named, -v /host:/container für Bind, --tmpfs /pfad für tmpfs. Anonymous Volumes entstehen aus VOLUME-Anweisungen im Dockerfile – ohne explizites Mapping leicht Datenverlust durch verwaiste Volumes. Volumes können zwischen Containern geteilt werden (Sidecar-Pattern, Backup-Container). Volume-Treiber erlauben Cloud- und Netzwerk-Storage (AWS EBS, NFS, CIFS) – in Kubernetes abstrahiert als PersistentVolumeClaims. Sicherheits-Hinweis: nie sensible Host-Pfade wie /var/run/docker.sock in Bind-Mounts geben. Read-only mit Suffix :ro.
Verwandte Lektionen: Docker Images & Container · Dockerfile schreiben · Docker Compose · und mehrWeitere relevante LektionenContainer vs. VMDocker-NetzwerkeDocker-SicherheitWas ist eine Datenbank?Backup-ArtenSpeicheranbindung (NAS/SAN)Cloud-Storage (EBS, Azure Disk)
