EMZETT.
Login

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 postgres legt das Volume daten an 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