Zum Hauptinhalt springen
Zurück zur Kategorie

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.

Lesezeit: 16 dk Container & Orchestrierung
dockervolumenetzwerkcontainerspeicherbridgeoverlay

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

TypBeschreibungAnwendungsfall
Named VolumeVon Docker verwaltetDatenbank, Anwendungsdaten
Bind MountHost-Verzeichnis einbindenEntwicklung, Konfigurationsdateien
tmpfs MountSpeicherbasiert temporärSensible temporäre Daten

Named Volume-Verwaltung

hljs bash
# 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

hljs bash
# 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

hljs bash
# 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

hljs yaml
# 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

hljs bash
# 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)

hljs bash
# 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

hljs bash
# Im Host-Netzwerkmodus ausführen (nur Linux)
docker run -d \
  --name nginx-host \
  --network host \
  nginx

Docker-Netzwerkverwaltung

hljs bash
# 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

hljs yaml
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.