Docker Swarm vs. Kubernetes
| Merkmal | Docker Swarm | Kubernetes |
|---|---|---|
| Komplexität | Niedrig | Hoch |
| Einrichtungszeit | 5 Minuten | 30–120 Minuten |
| Features | Ausreichend für KMU | Enterprise-Grade |
| Ressourcenverbrauch | Minimal | Höher |
| Lernkurve | Gering | Steil |
| docker-compose Support | Ja (Stacks) | Nein (Helm) |
3-Node Swarm aufsetzen
Voraussetzungen
- 3 Ubuntu Server (Manager + 2 Worker)
- Ports: 2377/TCP (Cluster), 7946/TCP+UDP (Nodes), 4789/UDP (Overlay)
# Ports in UFW öffnen (alle 3 Nodes)
sudo ufw allow 2377/tcp
sudo ufw allow 7946
sudo ufw allow 4789/udp
Manager-Node initialisieren
# Auf Manager-Node
docker swarm init --advertise-addr 192.168.1.10
# Ausgabe:
# docker swarm join --token SWMTKN-1-xxx 192.168.1.10:2377
Worker-Nodes hinzufügen
# Auf beiden Worker-Nodes (Token aus obiger Ausgabe)
docker swarm join --token SWMTKN-1-xxx 192.168.1.10:2377
# Cluster-Status prüfen (auf Manager)
docker node ls
Services deployen
# Service mit 3 Replicas
docker service create \
--name webserver \
--replicas 3 \
--publish published=80,target=80 \
--update-delay 10s \
nginx:alpine
# Services anzeigen
docker service ls
docker service ps webserver
# Skalieren
docker service scale webserver=5
# Rolling Update
docker service update \
--image nginx:1.25-alpine \
--update-parallelism 1 \
--update-delay 10s \
webserver
Stack deployen (Docker Compose Format)
# app-stack.yml
version: "3.8"
services:
web:
image: nginx:alpine
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- webnet
db:
image: postgres:16-alpine
deploy:
replicas: 1
placement:
constraints:
- "node.labels.db==true"
environment:
POSTGRES_PASSWORD: geheim
volumes:
- db-data:/var/lib/postgresql/data
networks:
- webnet
volumes:
db-data:
networks:
webnet:
driver: overlay
docker stack deploy -c app-stack.yml meine-app
docker stack services meine-app
Secrets in Swarm
# Secret erstellen
echo "SuperGeheimesPasswort!" | docker secret create db_password -
# Service mit Secret
docker service create \
--name db \
--secret db_password \
-e POSTGRES_PASSWORD_FILE=/run/secrets/db_password \
postgres:16-alpine
Secrets liegen als Dateien unter /run/secrets/ im Container – niemals in Umgebungsvariablen!
FAQ
Soll ich Swarm oder K3s für KMU nutzen?
Für einfache Apps und Teams ohne Kubernetes-Erfahrung: Swarm. Für größere Deployments mit mehr Services und besserer Observability: K3s.
Wie füge ich einen zweiten Manager hinzu (HA)?docker swarm join-token manager auf dem ersten Manager ausführen und den Token auf dem zweiten Manager-Node nutzen.
Fazit
Docker Swarm ist die einfachste Lösung für Multi-Node-Container-Hosting in KMU. Für Teams die Docker kennen ist der Umstieg auf Swarm trivial.
Container-Cluster für KMU in Heidelberg, Mannheim und der Rhein-Neckar-Region. Beratung anfragen.