Docker Volume und Netzwerkverwaltung: Persistenter Speicher und Netzwerkkonfiguration
Docker Volume-Typen (Named, Bind Mount, tmpfs), Volume-Verwaltung, Docker-Netzwerkmodi (Bridge, Host, Overlay), benutzerdefinierte Netzwerke und Container-Kommunikation. Umfassender Leitfaden.
Inhaltsverzeichnis
Docker Volume und Netzwerkverwaltung
Docker-Container sind standardmäßig flüchtig — wenn ein Container gelöscht wird, gehen auch seine Daten verloren. Volumes lösen dieses Problem und stellen sicher, dass Daten unabhängig vom Container-Lebenszyklus erhalten bleiben. Docker-Netzwerke verwalten die Kommunikation zwischen Containern und mit der Außenwelt.
Docker Volume-Typen
| Typ | Beschreibung | Anwendungsfall |
|---|---|---|
| Named Volume | Von Docker verwaltet | Datenbank, Anwendungsdaten |
| Bind Mount | Host-Verzeichnis einbinden | Entwicklung, Konfigurationsdateien |
| tmpfs Mount | Speicherbasiert temporär | Sensible temporäre Daten |
Named Volume-Verwaltung
# Volume erstellen
docker volume create myapp-data
# Volumes auflisten
docker volume ls
# Volume-Details anzeigen
docker volume inspect myapp-data
# Volume entfernen
docker volume rm myapp-data
# Ungenutzte Volumes bereinigen
docker volume prune
Container mit Named Volumes ausführen
# MySQL mit Volume ausführen
docker run -d \
--name mysql-db \
-e MYSQL_ROOT_PASSWORD=StarkesPasswort123! \
-e MYSQL_DATABASE=myapp \
-v mysql-data:/var/lib/mysql \
-p 3306:3306 \
mysql:8.0
# PostgreSQL mit Volume ausführen
docker run -d \
--name postgres-db \
-e POSTGRES_PASSWORD=StarkesPasswort123! \
-e POSTGRES_DB=myapp \
-v postgres-data:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:15
Bind Mounts verwenden
# Aktuelles Verzeichnis in Container einbinden
docker run -d \
--name nginx-web \
-v /home/user/website:/usr/share/nginx/html:ro \
-p 80:80 \
nginx:latest
# Bind Mount für Entwicklung
docker run -it \
--name node-dev \
-v $(pwd):/app \
-w /app \
-p 3000:3000 \
node:20 \
npm run dev
Volumes mit Docker Compose
# docker-compose.yml
version: '3.8'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: StarkesPasswort123!
MYSQL_DATABASE: myapp
volumes:
- mysql-data:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
ports:
- "3306:3306"
app:
image: myapp:latest
volumes:
- app-uploads:/app/uploads
- ./config:/app/config:ro
depends_on:
- db
volumes:
mysql-data:
driver: local
app-uploads:
driver: local
Volume-Sicherung und -Wiederherstellung
# Volume sichern (tar-Archiv)
docker run --rm \
-v mysql-data:/data \
-v $(pwd):/backup \
alpine tar czf /backup/mysql-backup.tar.gz -C /data .
# Volume wiederherstellen
docker run --rm \
-v mysql-data:/data \
-v $(pwd):/backup \
alpine tar xzf /backup/mysql-backup.tar.gz -C /data
Docker-Netzwerkmodi
Bridge-Netzwerk (Standard)
# Benutzerdefiniertes Bridge-Netzwerk erstellen
docker network create myapp-network
# Container mit benutzerdefiniertem Netzwerk verbinden
docker run -d \
--name web \
--network myapp-network \
nginx
docker run -d \
--name db \
--network myapp-network \
-e MYSQL_ROOT_PASSWORD=StarkesPasswort123! \
mysql:8.0
# Container im benutzerdefinierten Netzwerk finden sich per Name
docker exec web ping db
Host-Netzwerk
# Im Host-Netzwerkmodus ausführen (nur Linux)
docker run -d \
--name nginx-host \
--network host \
nginx
Docker-Netzwerkverwaltung
# Netzwerke auflisten
docker network ls
# Netzwerk-Details anzeigen
docker network inspect myapp-network
# Netzwerk mit benutzerdefiniertem Subnetz erstellen
docker network create \
--driver bridge \
--subnet 172.20.0.0/16 \
--gateway 172.20.0.1 \
myapp-network
# Container mit Netzwerk verbinden
docker network connect myapp-network existing-container
# Container vom Netzwerk trennen
docker network disconnect myapp-network existing-container
# Netzwerk entfernen
docker network rm myapp-network
Netzwerke mit Docker Compose
version: '3.8'
services:
frontend:
image: nginx:latest
networks:
- frontend-net
ports:
- "80:80"
backend:
image: myapp:latest
networks:
- frontend-net
- backend-net
db:
image: mysql:8.0
networks:
- backend-net
environment:
MYSQL_ROOT_PASSWORD: StarkesPasswort123!
networks:
frontend-net:
driver: bridge
backend-net:
driver: bridge
internal: true
Fazit
Docker Volume- und Netzwerkverwaltung sind die Grundpfeiler einer produktionsreifen Container-Infrastruktur. Speichern Sie Ihre Daten sicher mit Named Volumes, isolieren Sie Ihre Container mit benutzerdefinierten Bridge-Netzwerken und definieren Sie Ihre gesamte Infrastruktur als Code mit Docker Compose. Mit diesen Konfigurationen auf REXE-Servern können Sie zuverlässige und skalierbare Container-Umgebungen aufbauen.
Verwandte Artikel
K3s Kubernetes-Installation: Leichte Container-Orchestrierung
Einzel- und Multi-Node Kubernetes-Cluster-Setup mit K3s, kubectl-Nutzung, Deployments und Services erstellen, Anwendungsverwaltung mit Helm. Kubernetes-Leitfaden für VPS-Umgebungen.
Container-Logging: Docker und Kubernetes Log-Verwaltung
Docker-Log-Treiber, docker logs-Befehl, Kubernetes Pod-Logs, zentralisierte Log-Sammlung (Loki, ELK Stack), Log-Rotation und Best Practices für Log-Verwaltung in Produktionsumgebungen.
Docker-Sicherheit: Container-Umgebung absichern
Docker-Sicherheits-Best-Practices: Nicht-Root-Benutzer, Read-Only-Dateisystem, Seccomp-Profile, Image-Scanning, Docker-Socket-Sicherheit, Netzwerkisolierung und Secrets-Verwaltung.