Docker-Volumes und -Netzwerke: Daten und Verbindungen für Container
Kurz: Container sind flüchtig: Volumes speichern Daten dauerhaft außerhalb des Containers, Netzwerke verbinden Container untereinander.
Genauer: Das Dateisystem eines Containers gehört zu seinem Lebenszyklus: Wird er gelöscht, sind die Daten darin weg. Für Datenbanken, Uploads und Konfigurationen braucht man deshalb Volumes. Und damit mehrere Container (zum Beispiel Web-App und Datenbank) miteinander sprechen, nutzt Docker Netzwerke.
Im Detail
Volumes und Bind-Mounts
- Volume: Von Docker verwalteter Speicher.
docker run -v daten:/var/lib/postgresql/data postgreslegt das Volumedatenan und hängt es in den Container. Es überlebt das Löschen des Containers. - Bind-Mount: Ein Ordner des Hosts wird direkt eingebunden (
-v $(pwd)/code:/app). Praktisch für Entwicklung, weil Änderungen sofort im Container sichtbar sind. - tmpfs: Speicher im Arbeitsspeicher, geht beim Beenden verloren.
docker volume ls
docker volume inspect daten
docker volume rm daten
Netzwerke
Container in einem benutzerdefinierten Bridge-Netzwerk erreichen einander über Containernamen als Hostnamen:
docker network create appnetz
docker run -d --name db --network appnetz postgres
docker run -d --name web --network appnetz -p 8080:80 meine-app
In der App lautet die Datenbankadresse dann db:5432. Nur mit -p (Port-Veröffentlichung) ist ein Dienst auch vom Host oder Internet erreichbar; ohne bleibt er im Netz verborgen, was gut für die Sicherheit ist (Datenbank nicht veröffentlichen).
Docker Compose
In einer compose.yaml beschreibt man mehrere Container samt Volumes und Netzwerken gemeinsam:
services:
web:
build: .
ports: ["8080:3000"]
depends_on: [db]
db:
image: postgres:17
volumes: [dbdaten:/var/lib/postgresql/data]
volumes:
dbdaten:docker compose up -d startet alles, docker compose down beendet es (Volumes bleiben, außer mit -v).
Hinweise
Sichere Daten, die in Volumes liegen, wie jede andere Datenbank (Backups!). Berechtigungen zwischen Host und Container (Benutzer-IDs) sind ein häufiger Stolperstein bei Bind-Mounts. Netzwerkmodi wie host entfernen die Isolierung. Bei Kubernetes übernehmen PersistentVolumes und Services diese Aufgaben.
Siehe auch: Docker, Dockerfile, Kubernetes-Grundlagen, Backup-Strategie