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.
01 · Grundidee
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.
MERKSATZCompose organisiert mehrere Container auf einem Docker-Host. Swarm orchestriert Services über mehrere Docker-Hosts hinweg.
02 · Einordnung
Docker, Compose und Swarm auseinanderhalten
| Ebene | Typischer Einsatz | Wichtige Einheit |
| Docker Engine | ein Host, einzelne Container | Container |
| Docker Compose | mehrere zusammengehörige Container auf einem Host | Compose-Projekt |
| Docker Swarm | Cluster aus mehreren Docker Engines | Service / Task |
| Kubernetes | umfangreiche Orchestrierung mit eigenem Ökosystem | z. B. Pod / Deployment |
WANN NICHT?Wenn alles auf einem einzigen Host läuft und du keine Clusterfunktionen brauchst, ist Docker Compose meist übersichtlicher.
03 · Schlüsselbegriffe
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ÜFUNGSLOGIKService = Sollbeschreibung. Task = vom Scheduler zugewiesene Instanz. Container = tatsächlich laufender Prozessraum.
04 · Nodes
Manager und Worker
| Rolle | Aufgabe |
| Manager | Mitgliedschaft, Clusterzustand, Services, Scheduling und Raft-Konsens. |
| Worker | Führt die vom Manager zugewiesenen Tasks aus. |
| Manager + Worker | In kleinen Swarms darf ein Manager zusätzlich normale Tasks ausführen. |
PRAXISIn kritischen Umgebungen werden Manager oft auf Drain gesetzt, damit keine normalen Anwendungs-Tasks Ressourcen vom Cluster-Management wegnehmen.
05 · Laboraufbau
Ein kleiner 3-Node-Swarm
| Hostname | IP-Adresse | Rolle |
manager1 | 10.10.10.10 | Manager |
worker1 | 10.10.10.11 | Worker |
worker2 | 10.10.10.12 | Worker |
Ports zwischen Swarm-Nodes
| Port | Protokoll | Funktion |
| 2377 | TCP | Swarm-Management |
| 7946 | TCP + UDP | Node-Discovery und Overlay-Kommunikation |
| 4789 | UDP | VXLAN-Datenpfad |
SICHERHEITUDP 4789 nur im vertrauenswürdigen internen Swarm-Netz öffnen, nicht für untrusted Traffic an der Perimeter-Firewall.
06 · Swarm initialisieren
Der erste Manager
1
Swarm initialisierendocker swarm init --advertise-addr 10.10.10.10
2
Status prüfendocker info | grep -A8 Swarm
docker node ls
INTERNDocker erzeugt eine Swarm-CA, Join-Tokens und einen ersten Raft-Zustand. Der erste Manager ist zunächst Leader.
07 · Nodes beitreten lassen
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ÜTZENJoin-Tokens sind Zugangsdaten für den Cluster. Bei Bedarf rotieren: docker swarm join-token --rotate worker.
08 · Erster Service
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
WICHTIGdocker ps zeigt nur Container des lokalen Nodes. docker service ps web zeigt die Tasks des Service clusterweit.
09 · Desired State
Swarm hält den gewünschten Zustand
| Soll | Ist | Reaktion |
| 3 Replikate | 3 laufen | nichts nötig |
| 3 Replikate | 1 Task fällt aus | neuer Task wird erzeugt |
| 3 Replikate | 1 Worker fällt aus | Tasks werden auf verfügbare Nodes neu geplant |
SELBSTHEILUNGSwarm repariert nicht den defekten Container. Es ersetzt die fehlende Task-Instanz durch eine neue.
10 · Skalierung
Mehr oder weniger Replikate
docker service scale web=6
docker service ls
docker service ps web
docker service scale web=2
STATEFULStateless-Webserver lassen sich leicht replizieren. Datenbanken brauchen zusätzlich ein eigenes Daten- und Replikationskonzept.
11 · Service-Modi
Replicated oder Global
| Modus | Verhalten | Beispiel |
| replicated | gewünschte Anzahl an Tasks | Webserver, API, Worker |
| global | ein Task auf jedem passenden Node | Monitoring-Agent, Log-Collector |
docker service create --name agent --mode global alpine sleep 1d
12 · Overlay-Netzwerke
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
MERKSATZEin Overlay-Netz überspannt mehrere Docker-Nodes. Services im gleichen Overlay-Netz können über Service-Namen kommunizieren.
13 · Service Discovery
Warum Services keine festen Container-IPs brauchen
| Modus | Funktionsweise |
| VIP | Service-Name zeigt auf eine virtuelle IP; Docker verteilt auf Tasks. |
| DNSRR | DNS liefert mehrere Task-IP-Adressen zurück. |
PRAXISREGELInnerhalb eines Overlay-Netzes verbindest du dich normalerweise mit dem Service-Namen, nicht mit einer einzelnen Container-IP.
14 · Routing Mesh
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.
15 · Publish mode host
Routing Mesh bewusst umgehen
docker service create \
--name dns-cache \
--mode global \
--publish published=53,target=53,protocol=udp,mode=host \
IMAGE
| Ingress | Host |
| Port auf jedem Node erreichbar; Routing Mesh verteilt. | Port direkt auf dem Node mit Task. |
| einfacher für Webservices | mehr Kontrolle für externe Load Balancer |
16 · Rolling Updates
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
17 · Rollback
Auf die vorherige Service-Konfiguration zurück
docker service rollback web
docker service ps web
docker service inspect web --pretty
GRENZERollback stellt die vorherige Service-Konfiguration wieder her. Es ist kein Datenbank- oder Dateisystem-Rollback.
18 · Platzierung
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
19 · Node Availability
Active, Pause und Drain
| Status | Bedeutung |
| active | neue Tasks dürfen geplant werden. |
| pause | keine neuen Tasks; bestehende bleiben. |
| drain | keine neuen Tasks; bestehende Service-Tasks werden neu geplant. |
docker node update --availability drain worker1
docker node update --availability active worker1
20 · Secrets
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 CONTAINERSecrets werden unter Linux standardmäßig als Dateien unter /run/secrets/<name> bereitgestellt.
21 · Configs
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
22 · Stacks
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
BESONDERHEITdocker stack deploy orientiert sich weiterhin am älteren Compose-v3-Format. Nicht jede moderne Compose-Funktion ist automatisch Swarm-kompatibel.
23 · Persistenz
Warum Datenbanken im Swarm schwieriger sind
| Fall | Folge |
| Stateless Web-App | Task kann auf anderem Node neu entstehen. |
| lokales Docker-Volume | neuer Task auf anderem Node sieht das Volume nicht automatisch. |
| Datenbank | benötigt eigenes HA-/Replikationskonzept oder Shared Storage / feste Platzierung. |
MERKSATZOrchestrierung von Containern ist nicht dasselbe wie Replikation von Anwendungsdaten.
24 · Raft und Quorum
Warum Manager eine Mehrheit brauchen
Manager 1Leader
↔
Manager 2Reachable
↔
Manager 3Reachable
| Manager | Quorum | Ausfall tolerierbar |
| 1 | 1 | 0 |
| 3 | 2 | 1 |
| 5 | 3 | 2 |
| 7 | 4 | 3 |
GERADE ANZAHLVier Manager brauchen drei Stimmen und tolerieren ebenfalls nur einen Ausfall. Für HA werden daher typischerweise ungerade Managerzahlen verwendet.
25 · Manager-Hochverfügbarkeit
3, 5 oder 7 Manager?
| Größe | Typischer Gedanke |
| 1 Manager | Labor oder kleine nicht-HA Umgebung |
| 3 Manager | häufige Basis für Hochverfügbarkeit |
| 5 Manager | mehr Ausfalltoleranz, mehr Konsensaufwand |
| 7 Manager | größere Umgebungen; darüber meist wenig Zusatznutzen |
26 · Sicherheit
Was Swarm bereits mitbringt
| Funktion | Bedeutung |
| mTLS zwischen Nodes | Node-Authentifizierung und verschlüsselter Managementverkehr. |
| Join-Tokens | kontrollieren, wer Worker oder Manager werden darf. |
| Secrets | geschützte Verteilung sensibler Laufzeitdaten. |
| Autolock | zusätzlicher Unlock-Key nach Manager-Neustart. |
| Encrypted Overlay | optional verschlüsselte Anwendungsdaten im Overlay-Netz. |
docker swarm update --autolock=true
docker swarm unlock-key
27 · Swarm-Backup
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
WICHTIGDieses Lab-Beispiel ersetzt kein getestetes produktives Backup-/Restore-Konzept.
28 · Wartung
Einen Node sicher warten
1
Drain setzendocker node update --availability drain worker1
2
Status prüfendocker node ls
docker service ls
3
Host wartenUpdates, Docker-Wartung, Reboot.
4
Wieder aktivierendocker node update --availability active worker1
29 · Fehlersuche
Systematisch statt zufällig prüfen
| Problem | Prüfen |
| Node fehlt / Down | docker node ls, Netzwerk, Docker-Dienst, Ports 2377/7946/4789 |
| Service 0/N | docker service ps SERVICE --no-trunc |
| Task startet neu | docker service logs SERVICE, Image, Config, Secret |
| Service nicht erreichbar | Published Port, Routing Mesh, Firewall, Overlay-Netz |
| Keine Platzierung | Availability, Labels, Constraints, CPU-/RAM-Reservations |
| Manager-Kommandos scheitern | Quorum, Leader, Manager-Status |
docker node ls
docker service ls
docker service ps SERVICE --no-trunc
docker service logs SERVICE
docker service inspect SERVICE --pretty
30 · Cheatsheet
Wichtige Swarm-Befehle
| Aufgabe | Befehl |
| Swarm erzeugen | docker swarm init |
| Join-Token | docker swarm join-token worker|manager |
| Nodes | docker node ls |
| Service erzeugen | docker service create ... |
| Services | docker service ls |
| Tasks | docker service ps NAME |
| Skalieren | docker service scale NAME=N |
| Ändern | docker service update ... NAME |
| Rollback | docker service rollback NAME |
| Stack | docker stack deploy -c FILE STACK |
| Drain | docker node update --availability drain NODE |
31 · Praxislabor
Ein kompletter Lernablauf
13 Nodes vorbereiten und Swarm-Ports intern freigeben.
2Swarm auf manager1 initialisieren und zwei Worker joinen.
3Nginx-Service mit drei Replikaten und Port 8080 erstellen.
4Service auf sechs Replikate skalieren.
5worker1 auf Drain setzen und Task-Umschichtung beobachten.
6Overlay-Netz erstellen und zweiten Service hinzufügen.
7Rolling Update und Rollback testen.
8Secret anlegen und einem Service zuweisen.
9Stack mit docker stack deploy ausrollen.
10Testservices und Stack sauber entfernen.
32 · Kontrollfragen
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ÜFUNGSREGELWenn du jeden Punkt in 2–3 eigenen Sätzen erklären und mit einem Befehl oder Beispiel verbinden kannst, sitzt der Kernstoff.
33 · Quellen und Stand
Offizielle Docker-Dokumentation
Die HTML-Version entspricht dem zuvor erstellten Docker-Swarm-Lernskript und verwendet dieselben Themen und Befehle.
ABSCHLUSSDocker 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.