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
Autor
REXE Teknoloji Network & Security Team
Redaktion
REXE Teknoloji Technical Editorial
Erstveröffentlichung
Letzte Aktualisierung

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.

Häufig gestellte Fragen

Was ist der Unterschied zwischen einem Named Volume und einem Bind Mount?

Ein Named Volume wird von Docker verwaltet (gespeichert unter /var/lib/docker/volumes/), ist portabel und einfach zu sichern. Ein Bind Mount bindet direkt ein bestimmtes Host-Verzeichnis ein, ideal für sofortige Code-Änderungen in der Entwicklung. Named Volumes in der Produktion, Bind Mounts in der Entwicklung verwenden.

Container können sich nicht finden, was soll ich tun?

Container müssen sich im selben benutzerdefinierten Netzwerk befinden. Im Standard-Bridge-Netzwerk können Container sich nicht per Name finden — nur per IP. Erstellen Sie ein benutzerdefiniertes Netzwerk mit docker network create und verbinden Sie beide Container damit. Dann können Sie den Container-Namen als Hostname verwenden.

Wie sichere ich Volume-Daten?

Die zuverlässigste Methode: Verwenden Sie einen temporären Alpine-Container, um das Volume in ein tar-Archiv zu komprimieren. Der Befehl docker run --rm -v VOLUME_NAME:/data -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz -C /data . sichert den Volume-Inhalt im aktuellen Verzeichnis. Verwenden Sie tar xzf zur Wiederherstellung.

Wie finden sich Services in Docker Compose gegenseitig?

Docker Compose platziert Services aus derselben docker-compose.yml-Datei automatisch im selben Netzwerk. Services können sich per Service-Name finden. Ein Service namens 'db' ist von anderen Services über den Hostnamen 'db' erreichbar. Wenn Sie kein benutzerdefiniertes Netzwerk definieren, erstellt Compose ein Standard-Bridge-Netzwerk.

Wann sollte ich den Host-Netzwerkmodus verwenden?

Der Host-Netzwerkmodus wird verwendet, wenn der Container die Netzwerkschnittstelle des Hosts direkt nutzen muss. Vorteil: höchste Netzwerkleistung, kein Port-Mapping nötig. Nachteil: keine Isolation, Port-Konflikte möglich. Geeignet für hochleistungsfähige Netzwerkanwendungen. Funktioniert nur unter Linux.

Verwandte Artikel

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.

17 dk
dockersicherheitcontainer
NetzwerkverkehrEingehend GbpsAusgehend Gbps