Docker Swarm Clustering – Hochverfügbarkeit mit Docker einrichten | Enjyn Gruppe
Hallo Welt
Hallo Welt
Original Lingva Deutsch
Übersetzung wird vorbereitet...
Dieser Vorgang kann bis zu 60 Sekunden dauern.
Diese Seite wird erstmalig übersetzt und dann für alle Besucher gespeichert.
0%
DE Zurück zu Deutsch
Übersetzung durch Lingva Translate

303 Dokumentationen verfügbar

Wissensdatenbank

Docker Swarm Clustering Grundlagen

Zuletzt aktualisiert: 05.04.2026 um 19:42 Uhr

Docker Swarm Clustering – Hochverfügbarkeit mit Docker einrichten

Was ist Docker Swarm?

Docker Swarm ist die native Clustering- und Orchestrierungslösung von Docker. Mit Swarm können Sie mehrere Docker Hosts zu einem einzigen virtuellen Docker-Engine verbinden und Docker-Container über mehrere Maschinen hinweg verwalten und deployen. Swarm bietet built-in Load Balancing, Service-Discovery, Scheduling und Rolling Updates.

💡 Tipp: Docker Swarm ist einfacher als Kubernetes und perfekt für kleinere bis mittlere Deployments. Es ist direkt in Docker integriert und benötigt keine zusätzliche Installation.

Docker Swarm vs Kubernetes Vergleich

Kriterium Docker Swarm Kubernetes (K8s)
Komplexität Einfach, integriert in Docker Komplex, separate Installation
Lernkurve Flach (Docker-Kenntnisse reichen) Steil (viele neue Konzepte)
Installation Docker installieren, swarm init Kubeadm, Minikube, Helm etc.
Cluster-Größe Bis ca. 1000 Nodes Tausende Nodes (Google Scale)
Service-Discovery Eingebaut, DNS-Namen Eingebaut, Kube-DNS
Load Balancing Ingress-Network, eingebaut Service-Typen (ClusterIP, NodePort, LoadBalancer)
Konfiguration Docker Compose YAML Kubernetes YAML manifests
Rolling Updates docker service update Deployment-Strategien
Persistent Storage Einfacher PersistentVolumes, StorageClasses
Monitoring/Logging Manuell integrieren Prometheus, ELK Stack Integration
Community Kleiner, spezialisiert Riesig, Enterprise-fokussiert
Production-Ready Ja, für kleinere bis mittlere Deployments Ja, für Enterprise-Deployments
⚠️ Wichtig: Docker Swarm ist in Docker CE integriert, aber Kubernetes braucht separate Installation und Administration. Für Enterprise-Deployments mit vielen Nodes ist Kubernetes besser geeignet.

Docker Swarm Konzepte

Manager Nodes

Manager Nodes sind für die Verwaltung des Swarm-Clusters zuständig. Sie verwalten den Cluster-State, planen Container auf Worker Nodes und koordinieren alle Operationen. Es ist beste Praxis, 3, 5 oder 7 Manager Nodes zu haben (immer eine ungerade Anzahl für Quorum).

Worker Nodes

Worker Nodes führen die eigentlichen Container aus. Sie führen keine Verwaltungsaufgaben durch und können skiert werden ohne das Cluster zu beeinflussen.

Services

Ein Service ist die Abstraktion einer Anwendung in Swarm. Ein Service definiert, welches Image verwendet werden soll, wie viele Replikationen benötigt werden und welche Ports exponiert werden.

Tasks

Ein Task ist eine einzelne Container-Instanz. Ein Service mit 3 Replikationen besteht aus 3 Tasks.

Overlay Network

Overlay Networks ermöglichen sichere Multi-Host-Kommunikation zwischen Containern auf verschiedenen Nodes.

Ingress Network

Das Ingress Network verteilt eingehende Anfragen auf alle Nodes, die einen Service bereitstellen.

Swarm Cluster initialisieren

# Swarm auf dem ersten Manager-Node initialisieren
docker swarm init --advertise-addr 192.168.1.10

# Die Ausgabe sollte ähnlich aussehen:
# Swarm initialized: current node is now a manager.
#
# To add a worker to this Swarm, run the following command:
#
#     docker swarm join --token SWMTKN-1-... 192.168.1.10:2377
#
# To add a manager to this Swarm, run 'docker swarm join-token manager' and start docker on a new node
# with 'docker swarm join' and the token as below:
#
#     docker swarm join --token SWMTKN-1-... 192.168.1.10:2377

# Cluster-Status überprüfen
docker info | grep -A 5 Swarm

# Alle Nodes im Cluster auflisten
docker node ls

Weitere Manager und Worker Nodes hinzufügen

# Worker Join Token abrufen
docker swarm join-token worker

# Manager Join Token abrufen
docker swarm join-token manager

# Auf dem neuen Worker-Node ausführen:
docker swarm join --token SWMTKN-1-... 192.168.1.10:2377

# Auf dem neuen Manager-Node ausführen:
docker swarm join --token SWMTKN-1-... 192.168.1.10:2377

# Nodes überprüfen
docker node ls

# Node-Details inspizieren
docker node inspect node-name

# Label zu Node hinzufügen
docker node update --label-add "type=worker" node-name
docker node update --label-add "storage=ssd" node-name

# Labels überprüfen
docker node inspect --pretty node-name
✅ Gut zu wissen: Zwischen Manager Nodes wird der Swarm-State synchronisiert. Mit 3 Managern kann 1 Node ausfallen. Mit 5 Managern können 2 ausfallen. Dies gibt Ihnen Hochverfügbarkeit.

Services erstellen und verwalten

Service erstellen

# Einfacher Service mit 3 Replikationen
docker service create --replicas 3 --name web -p 80:80 nginx:latest

# Service mit mehr Optionen
docker service create \
  --name web \
  --replicas 3 \
  -p 80:80 \
  --update-delay 10s \
  --update-parallelism 1 \
  --update-failure-action rollback \
  --restart-condition on-failure \
  --restart-max-attempts 3 \
  nginx:latest

# Service mit Umgebungsvariablen
docker service create \
  --name myapp \
  --replicas 2 \
  -e DATABASE_URL="postgres://db:5432/mydb" \
  -e LOG_LEVEL="INFO" \
  myimage:latest

# Service mit Volume/Mount
docker service create \
  --name web \
  --mount type=bind,source=/data,target=/data \
  -p 80:80 \
  nginx:latest

# Service mit Resource Limits
docker service create \
  --name web \
  --limit-cpu 0.5 \
  --limit-memory 512m \
  --reserve-cpu 0.25 \
  --reserve-memory 256m \
  nginx:latest

Services auflisten und inspizieren

# Alle Services auflisten
docker service ls

# Service-Details
docker service inspect web

# Service Tasks anzeigen (welche Container auf welchen Nodes laufen)
docker service ps web

# Detaillierte Task-Informationen
docker service ps web --no-trunc

# Service-Logs anzeigen (alle Replicas)
docker service logs web

# Mit Follow (streaming)
docker service logs -f web

Services skalieren

# Service auf 5 Replikationen hochfahren
docker service scale web=5

# Mehrere Services gleichzeitig skalieren
docker service scale web=5 db=2 api=3

# Aktuelle Replicas überprüfen
docker service ps web

Rolling Updates

# Service Image aktualisieren
docker service update --image nginx:latest web

# Mit Update-Strategie
docker service update \
  --image nginx:latest \
  --update-delay 10s \
  --update-parallelism 1 \
  --update-failure-action rollback \
  web

# Update-Parameter erklären:
# --update-delay: Wartezeit zwischen Container-Updates (10s)
# --update-parallelism: Wie viele Container gleichzeitig aktualisieren (1)
# --update-failure-action: rollback bei Fehler oder pause

# Zu vorheriger Version zurückrollen
docker service update --image nginx:previous web

# Service-Update Status überprüfen
docker service ps web

# Einzelne Replicas aktualisieren überprüfen
docker service ps web --no-trunc
⚠️ Wichtig: Rolling Updates sind wichtig für Zero-Downtime-Deployments. Mit --update-failure-action=rollback wird automatisch zurückgerollt, wenn Updates fehlschlagen.

Constraints und Node-Label

Mit Constraints können Sie festlegen, auf welchen Nodes ein Service laufen darf.

# Node mit Label versehen
docker node update --label-add "environment=production" node-1
docker node update --label-add "environment=staging" node-2
docker node update --label-add "type=gpu" node-3

# Service nur auf Production-Nodes starten
docker service create \
  --name web \
  --constraint node.labels.environment==production \
  nginx:latest

# Service nur auf Worker Nodes starten (nicht auf Managern)
docker service create \
  --name web \
  --constraint node.role==worker \
  nginx:latest

# Service nur auf GPU-Nodes starten
docker service create \
  --name ai-app \
  --constraint node.labels.type==gpu \
  ai-model:latest

# Mehrere Constraints (AND-Logik)
docker service create \
  --name web \
  --constraint node.labels.environment==production \
  --constraint node.labels.storage==ssd \
  nginx:latest

# Service auf Managern starten (normalerweise nicht empfohlen)
docker service create \
  --name monitoring \
  --constraint node.role==manager \
  prometheus:latest

Overlay Networks für Multi-Host-Kommunikation

# Overlay Network erstellen
docker network create --driver overlay mynet

# Service mit spezifischem Network starten
docker service create \
  --name web \
  --network mynet \
  -p 80:80 \
  nginx:latest

# Zweiter Service im gleichen Network
docker service create \
  --name db \
  --network mynet \
  postgres:latest

# Die Services können sich per Hostname erreichen
# Web-Container kann sich zu "db" verbinden

# Netzwerk inspizieren
docker network inspect mynet

# Services im Netzwerk aufgelistet
docker network ls

# Netzwerk löschen
docker network rm mynet

# Netzwerk mit Custom Options
docker network create \
  --driver overlay \
  --subnet 10.0.9.0/24 \
  --gateway 10.0.9.1 \
  custom-net

Docker Stack: Multi-Service Deployment mit Compose

Ein Stack ist eine Gruppe von Services, die zusammen deployt werden. Die Definition erfolgt über Docker Compose Files.

docker-compose.yml für Stack

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
        failure_action: rollback
      restart_policy:
        condition: on-failure
        max_attempts: 3
    volumes:
      - /data/nginx:/etc/nginx/html
    networks:
      - frontend

  api:
    image: myapi:latest
    deploy:
      replicas: 2
      constraints:
        - node.role==worker
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M
    environment:
      - DATABASE_URL=postgres://db:5432/mydb
      - REDIS_URL=redis://cache:6379
    networks:
      - frontend
      - backend
    depends_on:
      - db
      - cache

  db:
    image: postgres:15
    deploy:
      replicas: 1
      constraints:
        - node.labels.type==database
      restart_policy:
        condition: on-failure
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secure123
      POSTGRES_DB: mydb
    volumes:
      - db_data:/var/lib/postgresql/data
    networks:
      - backend

  cache:
    image: redis:7
    deploy:
      replicas: 1
    networks:
      - backend

networks:
  frontend:
    driver: overlay
  backend:
    driver: overlay

volumes:
  db_data:
    driver: local

Stack deployen und verwalten

# Stack deployen
docker stack deploy -c docker-compose.yml myapp

# Stacks auflisten
docker stack ls

# Stack-Services anzeigen
docker stack services myapp

# Stack-Tasks anzeigen
docker stack ps myapp

# Service im Stack skalieren
docker service scale myapp_web=5

# Stack entfernen
docker stack rm myapp

# Service in Stack aktualisieren
docker service update --image myapi:v2.0 myapp_api

# Stack-Status überprüfen
docker stack ps myapp --no-trunc

Portainer für GUI-Management

Portainer ist eine webbasierte GUI zum Verwalten von Docker und Docker Swarm Clustern.

# Portainer als Stack deployen
docker stack deploy -c - portainer << 'EOF'
version: '3.8'

services:
  portainer:
    image: portainer/portainer-ce:latest
    command: -H unix:///var/run/docker.sock
    ports:
      - "9000:9000"
      - "8000:8000"
    deploy:
      placement:
        constraints:
          - node.role == manager
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    networks:
      - agent_network

  agent:
    image: portainer/agent:latest
    environment:
      AGENT_CLUSTER_ADDR: tasks.agent
      AGENT_PORT: 9001
      LOG_LEVEL: info
    ports:
      - target: 9001
        published: 9001
        protocol: tcp
        mode: host
    deploy:
      mode: global
      restart_policy:
        condition: on-failure
        max_attempts: 5
        window: 10s
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
    networks:
      - agent_network

networks:
  agent_network:
    driver: overlay

volumes:
  portainer_data:
EOF

# Nach Deployment auf http://localhost:9000 zugreifen
# Admin-Passwort bei erstem Login setzen

Node-Wartung und Drain

Für Wartungsarbeiten können Sie einen Node in Drain-Modus versetzen. Dies verschiebt alle Container auf andere Nodes.

# Node in Drain-Modus versetzen (keine neuen Container mehr)
docker node update --availability drain node-name

# Node-Status überprüfen
docker node inspect --pretty node-name

# Damit Services auf andere Nodes verschoben werden
docker service update --force web

# Überprüfen, dass alle Tasks auf andere Nodes verschoben wurden
docker service ps web

# Node nach Wartung wieder aktivieren
docker node update --availability active node-name

# Node aus dem Cluster entfernen (vorher auf einem Manager)
docker swarm leave --force

# Node aus Cluster-Perspektive entfernen
docker node rm node-name
💡 Tipp: Verwenden Sie immer Drain vor Wartung. Dies stellt sicher, dass alle Container auf andere Nodes verschoben werden, bevor Sie den Node ausschalten.

Monitoring und Fehlerbehebung

# Swarm Health Status
docker info

# Cluster-Events anzeigen
docker events --filter type=service

# Service Health überprüfen
docker service ps web --no-trunc

# Manager-Logs überprüfen (auf Manager-Node)
journalctl -u docker -f

# Docker Daemon-Logs
sudo journalctl -u docker -f

# Netzwerk-Verbindungen überprüfen
docker exec  netstat -tulpn

# Service-Discovery testen
docker exec  nslookup db

Sicherheit in Docker Swarm

# Swarm verfügt über mutual TLS für alle Kommunikation
# Dies ist automatisch aktiviert und kann nicht deaktiviert werden

# Zertifikate überprüfen
docker info | grep -A 2 "TLS"

# Manager CA Zertifikat rotieren
docker swarm ca --rotate

# Zertifikat mit Custom Expiration
docker swarm ca --rotate --cert-expiry 2160h

Weitere Ressourcen


Letzte Aktualisierung: April 2026 | Docker Swarm Version 27.0+

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
120