DOCKER SWARM
Cluster · Services · Overlay-Netze · Hochverfügbarkeit
Lernskript

Docker Swarm

Container-Orchestrierung mit Docker Engine – ausführlich erklärt, aber Schritt für Schritt und anfängerfreundlich.

Stand 16.09.2026 Docker Engine Cluster Services High Availability
ManagerRaft · Scheduler
Worker 1führt Tasks aus
Worker 2führt Tasks aus
ZIEL DIESES SKRIPTS
Du verstehst, warum Swarm mehr ist als mehrere Docker-Server, kannst einen eigenen Swarm aufbauen, Services verteilen und skalieren, Netzwerke und Routing erklären sowie Wartung, Updates, Secrets und Manager-Quorum einordnen.

Was ist Docker Swarm?

Ein normaler Docker-Host verwaltet nur seine eigenen Container. Swarm verbindet mehrere Docker Engines zu einem Cluster, der Services gemeinsam ausführt und den gewünschten Zustand automatisch aufrechterhält.

  • Du denkst nicht mehr primär in einzelnen Containern, sondern in Services.
  • Du beschreibst den gewünschten Zustand, z. B. „drei Nginx-Instanzen“.
  • Der Swarm-Manager entscheidet, auf welchen Nodes Tasks laufen.
  • Fällt ein Task oder Node aus, versucht Swarm den gewünschten Zustand wiederherzustellen.
MERKSATZ
Compose organisiert mehrere Container auf einem Docker-Host. Swarm orchestriert Services über mehrere Docker-Hosts hinweg.

Docker, Compose und Swarm auseinanderhalten

EbeneTypischer EinsatzWichtige Einheit
Docker Engineein Host, einzelne ContainerContainer
Docker Composemehrere zusammengehörige Container auf einem HostCompose-Projekt
Docker SwarmCluster aus mehreren Docker EnginesService / Task
Kubernetesumfangreiche Orchestrierung mit eigenem Ökosystemz. B. Pod / Deployment
WANN NICHT?
Wenn alles auf einem einzigen Host läuft und du keine Clusterfunktionen brauchst, ist Docker Compose meist übersichtlicher.

Service, Task und Container

Servicegewünschter Zustand
Task 1geplante Instanz
Task 2geplante Instanz
Containerläuft tatsächlich

Service

Beschreibt den gewünschten Zustand: Image, Replikate, Ports, Netzwerke, Ressourcen, Update-Verhalten und Platzierungsregeln.

Task

Eine einzelne geplante Arbeitseinheit eines Service. Fällt sie aus, erzeugt Swarm eine neue Task-Instanz.

Container

Die konkrete Laufzeitinstanz, die für einen Task gestartet wird.

PRÜFUNGSLOGIK
Service = Sollbeschreibung. Task = vom Scheduler zugewiesene Instanz. Container = tatsächlich laufender Prozessraum.

Manager und Worker

RolleAufgabe
ManagerMitgliedschaft, Clusterzustand, Services, Scheduling und Raft-Konsens.
WorkerFührt die vom Manager zugewiesenen Tasks aus.
Manager + WorkerIn kleinen Swarms darf ein Manager zusätzlich normale Tasks ausführen.
PRAXIS
In kritischen Umgebungen werden Manager oft auf Drain gesetzt, damit keine normalen Anwendungs-Tasks Ressourcen vom Cluster-Management wegnehmen.

Ein kleiner 3-Node-Swarm

HostnameIP-AdresseRolle
manager110.10.10.10Manager
worker110.10.10.11Worker
worker210.10.10.12Worker

Ports zwischen Swarm-Nodes

PortProtokollFunktion
2377TCPSwarm-Management
7946TCP + UDPNode-Discovery und Overlay-Kommunikation
4789UDPVXLAN-Datenpfad
SICHERHEIT
UDP 4789 nur im vertrauenswürdigen internen Swarm-Netz öffnen, nicht für untrusted Traffic an der Perimeter-Firewall.

Der erste Manager

1
Swarm initialisieren
docker swarm init --advertise-addr 10.10.10.10
2
Status prüfen
docker info | grep -A8 Swarm
docker node ls
INTERN
Docker erzeugt eine Swarm-CA, Join-Tokens und einen ersten Raft-Zustand. Der erste Manager ist zunächst Leader.

Worker zum Swarm hinzufügen

docker swarm join-token worker

Auf worker1 und worker2:

docker swarm join --token SWMTKN-1-... 10.10.10.10:2377

Zurück auf dem Manager:

docker node ls
TOKEN SCHÜTZEN
Join-Tokens sind Zugangsdaten für den Cluster. Bei Bedarf rotieren: docker swarm join-token --rotate worker.

Nginx als Swarm-Service starten

docker service create \
  --name web \
  --replicas 3 \
  --publish published=8080,target=80 \
  nginx:alpine
docker service ls
docker service ps web
WICHTIG
docker ps zeigt nur Container des lokalen Nodes. docker service ps web zeigt die Tasks des Service clusterweit.

Swarm hält den gewünschten Zustand

SollIstReaktion
3 Replikate3 laufennichts nötig
3 Replikate1 Task fällt ausneuer Task wird erzeugt
3 Replikate1 Worker fällt ausTasks werden auf verfügbare Nodes neu geplant
SELBSTHEILUNG
Swarm repariert nicht den defekten Container. Es ersetzt die fehlende Task-Instanz durch eine neue.

Mehr oder weniger Replikate

docker service scale web=6
docker service ls
docker service ps web
docker service scale web=2
STATEFUL
Stateless-Webserver lassen sich leicht replizieren. Datenbanken brauchen zusätzlich ein eigenes Daten- und Replikationskonzept.

Replicated oder Global

ModusVerhaltenBeispiel
replicatedgewünschte Anzahl an TasksWebserver, API, Worker
globalein Task auf jedem passenden NodeMonitoring-Agent, Log-Collector
docker service create --name agent --mode global alpine sleep 1d

Container über Hostgrenzen verbinden

docker network create --driver overlay app-net
docker service create --name api --network app-net nginx:alpine

Optional verschlüsselt

docker network create --driver overlay --opt encrypted secure-net
MERKSATZ
Ein Overlay-Netz überspannt mehrere Docker-Nodes. Services im gleichen Overlay-Netz können über Service-Namen kommunizieren.

Warum Services keine festen Container-IPs brauchen

ModusFunktionsweise
VIPService-Name zeigt auf eine virtuelle IP; Docker verteilt auf Tasks.
DNSRRDNS liefert mehrere Task-IP-Adressen zurück.
PRAXISREGEL
Innerhalb eines Overlay-Netzes verbindest du dich normalerweise mit dem Service-Namen, nicht mit einer einzelnen Container-IP.

Ein veröffentlichter Port auf jedem Node

ClientPort 8080
Node Akeine Task
Node Bnginx.1
Node Cnginx.2
docker service create \
  --name web \
  --replicas 2 \
  --publish published=8080,target=80 \
  nginx:alpine

Port 8080 ist damit auf jedem Swarm-Node erreichbar. Der Routing Mesh kann die Verbindung an einen passenden Task weiterleiten.

Routing Mesh bewusst umgehen

docker service create \
  --name dns-cache \
  --mode global \
  --publish published=53,target=53,protocol=udp,mode=host \
  IMAGE
IngressHost
Port auf jedem Node erreichbar; Routing Mesh verteilt.Port direkt auf dem Node mit Task.
einfacher für Webservicesmehr Kontrolle für externe Load Balancer

Services schrittweise aktualisieren

docker service create \
  --name web \
  --replicas 6 \
  --update-parallelism 2 \
  --update-delay 10s \
  nginx:1.27-alpine
docker service update --image nginx:1.28-alpine web
docker service ps web

Auf die vorherige Service-Konfiguration zurück

docker service rollback web
docker service ps web
docker service inspect web --pretty
GRENZE
Rollback stellt die vorherige Service-Konfiguration wieder her. Es ist kein Datenbank- oder Dateisystem-Rollback.

Wo darf ein Service laufen?

docker node update --label-add storage=ssd worker1
docker node update --label-add storage=hdd worker2
docker service create \
  --name fast-web \
  --constraint 'node.labels.storage==ssd' \
  nginx:alpine

Ressourcen begrenzen

docker service create \
  --name api \
  --replicas 3 \
  --reserve-memory 256M \
  --limit-memory 512M \
  --limit-cpu 0.50 \
  nginx:alpine

Active, Pause und Drain

StatusBedeutung
activeneue Tasks dürfen geplant werden.
pausekeine neuen Tasks; bestehende bleiben.
drainkeine neuen Tasks; bestehende Service-Tasks werden neu geplant.
docker node update --availability drain worker1
docker node update --availability active worker1

Passwörter nicht in Images oder YAML schreiben

printf 'SehrGeheim123!' | docker secret create db_password -
docker secret ls
docker service create \
  --name demo \
  --secret db_password \
  alpine sleep 1d
IM CONTAINER
Secrets werden unter Linux standardmäßig als Dateien unter /run/secrets/<name> bereitgestellt.

Nicht-sensitive Konfiguration verteilen

echo 'server_name example.internal;' > app.conf
docker config create app_conf app.conf
docker config ls
docker service create \
  --name webcfg \
  --config source=app_conf,target=/etc/app/app.conf \
  alpine sleep 1d

Mehrere Services gemeinsam deployen

version: "3.8"

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 5s
docker stack deploy -c stack.yml demo
docker stack ls
docker stack services demo
docker stack ps demo
BESONDERHEIT
docker stack deploy orientiert sich weiterhin am älteren Compose-v3-Format. Nicht jede moderne Compose-Funktion ist automatisch Swarm-kompatibel.

Warum Datenbanken im Swarm schwieriger sind

FallFolge
Stateless Web-AppTask kann auf anderem Node neu entstehen.
lokales Docker-Volumeneuer Task auf anderem Node sieht das Volume nicht automatisch.
Datenbankbenötigt eigenes HA-/Replikationskonzept oder Shared Storage / feste Platzierung.
MERKSATZ
Orchestrierung von Containern ist nicht dasselbe wie Replikation von Anwendungsdaten.

Warum Manager eine Mehrheit brauchen

Manager 1Leader
Manager 2Reachable
Manager 3Reachable
ManagerQuorumAusfall tolerierbar
110
321
532
743
GERADE ANZAHL
Vier Manager brauchen drei Stimmen und tolerieren ebenfalls nur einen Ausfall. Für HA werden daher typischerweise ungerade Managerzahlen verwendet.

3, 5 oder 7 Manager?

GrößeTypischer Gedanke
1 ManagerLabor oder kleine nicht-HA Umgebung
3 Managerhäufige Basis für Hochverfügbarkeit
5 Managermehr Ausfalltoleranz, mehr Konsensaufwand
7 Managergrößere Umgebungen; darüber meist wenig Zusatznutzen

Was Swarm bereits mitbringt

FunktionBedeutung
mTLS zwischen NodesNode-Authentifizierung und verschlüsselter Managementverkehr.
Join-Tokenskontrollieren, wer Worker oder Manager werden darf.
Secretsgeschützte Verteilung sensibler Laufzeitdaten.
Autolockzusätzlicher Unlock-Key nach Manager-Neustart.
Encrypted Overlayoptional verschlüsselte Anwendungsdaten im Overlay-Netz.
docker swarm update --autolock=true
docker swarm unlock-key

Manager-Zustand sichern

Swarm-State-Backup und Anwendungsbackup sind zwei verschiedene Dinge.

  • Backup auf einem Manager erstellen.
  • Das Verzeichnis /var/lib/docker/swarm sichern.
  • Anwendungsdaten und Volumes separat sichern.
sudo systemctl stop docker
sudo tar -C /var/lib/docker -czf /root/swarm-backup.tgz swarm
sudo systemctl start docker
WICHTIG
Dieses Lab-Beispiel ersetzt kein getestetes produktives Backup-/Restore-Konzept.

Einen Node sicher warten

1
Drain setzen
docker node update --availability drain worker1
2
Status prüfen
docker node ls
docker service ls
3
Host warten

Updates, Docker-Wartung, Reboot.

4
Wieder aktivieren
docker node update --availability active worker1

Systematisch statt zufällig prüfen

ProblemPrüfen
Node fehlt / Downdocker node ls, Netzwerk, Docker-Dienst, Ports 2377/7946/4789
Service 0/Ndocker service ps SERVICE --no-trunc
Task startet neudocker service logs SERVICE, Image, Config, Secret
Service nicht erreichbarPublished Port, Routing Mesh, Firewall, Overlay-Netz
Keine PlatzierungAvailability, Labels, Constraints, CPU-/RAM-Reservations
Manager-Kommandos scheiternQuorum, Leader, Manager-Status
docker node ls
docker service ls
docker service ps SERVICE --no-trunc
docker service logs SERVICE
docker service inspect SERVICE --pretty

Wichtige Swarm-Befehle

AufgabeBefehl
Swarm erzeugendocker swarm init
Join-Tokendocker swarm join-token worker|manager
Nodesdocker node ls
Service erzeugendocker service create ...
Servicesdocker service ls
Tasksdocker service ps NAME
Skalierendocker service scale NAME=N
Änderndocker service update ... NAME
Rollbackdocker service rollback NAME
Stackdocker stack deploy -c FILE STACK
Draindocker node update --availability drain NODE

Ein kompletter Lernablauf

1
3 Nodes vorbereiten und Swarm-Ports intern freigeben.
2
Swarm auf manager1 initialisieren und zwei Worker joinen.
3
Nginx-Service mit drei Replikaten und Port 8080 erstellen.
4
Service auf sechs Replikate skalieren.
5
worker1 auf Drain setzen und Task-Umschichtung beobachten.
6
Overlay-Netz erstellen und zweiten Service hinzufügen.
7
Rolling Update und Rollback testen.
8
Secret anlegen und einem Service zuweisen.
9
Stack mit docker stack deploy ausrollen.
10
Testservices und Stack sauber entfernen.

Kannst du Swarm erklären?

  • Was ist der Unterschied zwischen Service, Task und Container?
  • Welche Aufgaben übernimmt ein Manager, welche ein Worker?
  • Was bedeutet Desired State?
  • Wozu dienen die Ports 2377, 7946 und 4789?
  • Was ist der Unterschied zwischen replicated und global?
  • Was macht ein Overlay-Netzwerk?
  • Wie funktioniert das Routing Mesh?
  • Warum ist Drain vor Wartungsarbeiten sinnvoll?
  • Warum sind drei Manager besser für HA als zwei?
  • Was ist der Unterschied zwischen Secrets und Configs?
  • Warum löst Swarm nicht automatisch das Speicherproblem einer Datenbank?
  • Was bedeutet Rolling Update und wozu dient Rollback?
PRÜFUNGSREGEL
Wenn du jeden Punkt in 2–3 eigenen Sätzen erklären und mit einem Befehl oder Beispiel verbinden kannst, sitzt der Kernstoff.

Offizielle Docker-Dokumentation

Die HTML-Version entspricht dem zuvor erstellten Docker-Swarm-Lernskript und verwendet dieselben Themen und Befehle.

ABSCHLUSS
Docker Swarm ist vor allem ein Modell des gewünschten Zustands: Du beschreibst Services, der Manager plant Tasks, und der Cluster versucht diesen Zustand auch bei Änderungen und Ausfällen beizubehalten.