Docker Netzwerk & Volumes

7 Kernkonzepte
Die wichtigsten Konzepte für Docker-Netzwerke und persistente Daten: bridge · host · overlay · macvlan · volumes · bind-mounts · docker volume Netzwerke ermöglichen die Kommunikation zwischen Containern und der Außenwelt. Volumes und Bind-Mounts sorgen für persistente Daten über Container-Neustarts hinweg.

Netzwerk-Grundlagen – docker network

docker network create · ls · inspect · rm
docker network create --driver bridge my-network docker network ls docker network inspect my-network

docker network ist der zentrale Befehl zur Verwaltung von Docker-Netzwerken. Er ermöglicht das Erstellen, Auflisten, Inspizieren und Löschen von Netzwerken.

Die wichtigsten Netzwerk-Befehle

Befehl Beschreibung
docker network ls Alle Netzwerke auflisten
docker network create Neues Netzwerk erstellen
docker network inspect Details eines Netzwerks anzeigen
docker network rm Netzwerk löschen
docker network prune Nicht verwendete Netzwerke entfernen
Beispiele
docker network ls # Alle Netzwerke anzeigen
docker network create app-network # Standard Bridge
docker network inspect bridge # Standard-Bridge anzeigen
docker network rm app-network # Netzwerk löschen
docker network prune # Nicht verwendete entfernen
Tipp: Docker erstellt automatisch drei Standard-Netzwerke: bridge (Standard), host und none. Eigene Netzwerke bieten mehr Kontrolle und Isolation.

Bridge – Standard-Netzwerktreiber

--driver bridge · default
docker network create --driver bridge my-bridge docker run --network my-bridge nginx

Bridge ist der Standard-Netzwerktreiber. Container im gleichen Bridge-Netzwerk können sich über IP oder Container-Name (mit --link) erreichen. Benutzerdefinierte Bridges bieten DNS-Service-Discovery.

Beispiele
# Benutzerdefiniertes Bridge-Netzwerk erstellen
docker network create --driver bridge app-net
# Container im Netzwerk starten
docker run -d --name web --network app-net nginx
docker run -it --network app-net busybox ping web # DNS-Auflösung funktioniert
# Mit Port-Weiterleitung
docker run -d --name web2 --network app-net -p 8080:80 nginx
Tipp: Benutzerdefinierte Bridge-Netzwerke bieten automatische DNS-Auflösung – Container können sich über ihren Namen erreichen (im Standard-Bridge-Netzwerk nur mit --link).

host – Host-Netzwerk direkt nutzen

--network host
docker run --network host nginx

host entfernt die Netzwerk-Isolation – der Container verwendet direkt das Netzwerk des Hosts. Ports werden automatisch auf dem Host verfügbar, -p wird ignoriert.

Beispiele
docker run --network host nginx # Nginx auf Host-Port 80
docker run --network host node:18 node app.js # App auf Host-Port
# Performance-Vorteil, aber weniger Isolation
# Keine Port-Weiterleitung nötig
⚠️ Achtung: Der host-Netzwerkmodus bietet die beste Performance, aber die geringste Sicherheit. Verwenden Sie ihn nur, wenn absolute Performance benötigt wird oder wenn ein Container viele Ports bereitstellt.

Overlay & Macvlan – Fortgeschrittene Treiber

--driver overlay · --driver macvlan
docker network create --driver overlay --attachable overlay-net docker network create --driver macvlan --subnet=192.168.1.0/24 -o parent=eth0 macvlan-net

Overlay ermöglicht die Kommunikation zwischen Containern auf verschiedenen Docker-Hosts (für Swarm und Kubernetes). Macvlan weist Containern eine eigene MAC-Adresse zu und bindet sie direkt ins physische Netzwerk ein.

Beispiele
# Overlay-Netzwerk (für Swarm-Modus)
docker network create --driver overlay --attachable app-overlay
# Macvlan-Netzwerk (Container bekommt eigene IP)
docker network create --driver macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 macvlan-net
docker run --network macvlan-net --ip=192.168.1.100 nginx # Container mit fester IP
Tipp: Overlay-Netzwerke sind für Swarm-Modus und Kubernetes Cluster geeignet. Macvlan wird oft für Legacy-Anwendungen verwendet, die eine direkte Netzwerkanbindung benötigen.

Volumes – Benannte Volumes für persistente Daten

docker volume · docker run -v
docker volume create db-data docker run -v db-data:/var/lib/mysql mysql docker volume ls

Volumes sind die bevorzugte Methode für persistente Daten in Docker. Sie werden von Docker verwaltet, sind von Containern unabhängig und können zwischen Containern geteilt werden.

Die wichtigsten Volume-Befehle

Befehl Beschreibung
docker volume create Neues Volume erstellen
docker volume ls Alle Volumes auflisten
docker volume inspect Details eines Volumes anzeigen
docker volume rm Volume löschen
docker volume prune Nicht verwendete Volumes entfernen
Beispiele
# Volume erstellen und verwenden
docker volume create postgres-data
docker run -d --name db -v postgres-data:/var/lib/postgresql/data postgres:15
# Volume mit Container teilen
docker run -d --name backup -v postgres-data:/backup ubuntu tail -f /dev/null
# Volume inspizieren
docker volume inspect postgres-data
Tipp: Benannte Volumes werden nicht mit docker rm oder docker-compose down gelöscht – das schützt Ihre Daten. Löschen Sie Volumes explizit mit docker volume rm oder docker-compose down -v.

Bind-Mounts – Host-Verzeichnisse einbinden

-v /host/pfad:/container/pfad
docker run -v $(pwd)/app:/app node:18 node app.js docker run --mount type=bind,source=$(pwd)/app,target=/app node:18

Bind-Mounts binden ein Verzeichnis vom Host in den Container ein – ideal für Entwicklung (Live-Reload) und für die Konfiguration von Containern.

Beispiele
# Entwicklung mit Live-Reload (z.B. Node.js)
docker run -v $(pwd):/app -w /app -p 3000:3000 node:18 npm run dev
# Konfiguration einbinden (z.B. Nginx)
docker run -v ./nginx.conf:/etc/nginx/nginx.conf:ro nginx # :ro = read-only
# Mit --mount (expliziter, lesbarer)
docker run --mount type=bind,source="$(pwd)"/data,target=/data ubuntu ls /data
# Relative Pfade (nur mit -v)
docker run -v ./logs:/var/log/app myapp
Tipp: Verwenden Sie Bind-Mounts für die Entwicklung und für Konfigurationsdateien. Für persistente Daten in der Produktion sind benannte Volumes die bessere Wahl, da sie besser von Docker verwaltet werden.

Verwaltung – Volumes & Netzwerke prüfen

inspect · prune · cleanup
docker volume prune docker network prune docker system df docker system prune -a

Verwaltungsbefehle helfen, nicht verwendete Volumes, Netzwerke und andere Ressourcen zu identifizieren und zu entfernen – wichtig für die Speicherplatzverwaltung.

Beispiele
docker system df # Speicherplatzübersicht
docker volume ls # Alle Volumes auflisten
docker volume inspect $(docker volume ls -q) # Alle Volumes inspizieren
docker volume prune # Nicht verwendete Volumes löschen
docker network prune # Nicht verwendete Netzwerke löschen
docker system prune -a # Alles Unbenutzte löschen (⚠️ vorsichtig!)
⚠️ Warnung: docker system prune -a löscht alle nicht verwendeten Container, Images, Netzwerke und Volumes (ohne --volumes). Verwenden Sie docker volume prune gezielt, um Datenverlust zu vermeiden.

Netzwerk & Volumes im Überblick

bridge Standard-Netzwerk
Container-Isolation
host Host-Netzwerk
Maximale Performance
overlay Multi-Host
Swarm, Kubernetes
volume Benanntes Volume
Persistente Daten
bind Host-Verzeichnis
Entwicklung, Konfiguration
prune Aufräumen
Nicht verwendete Ressourcen

Quick Summary

network
Netzwerkverwaltung
bridge
Standard-Isolation
host
Host-Netzwerk
overlay
Multi-Host
volume
Persistente Daten
bind
Host-Verzeichnis
docker network create app-net · docker run -v myvolume:/data · docker volume prune