| name | docker-swarm |
| description | Docker Swarm orchestration, cluster management, and production deployments |
| sasmp_version | 1.3.0 |
| bonded_agent | 08-docker-orchestration |
| bond_type | PRIMARY_BOND |
Docker Swarm Skill
Master Docker Swarm for container orchestration, cluster management, and production deployments.
Purpose
Set up and manage Docker Swarm clusters for high availability, service scaling, and production orchestration.
Parameters
| Parameter | Type | Required | Default | Description |
|---|
| managers | number | No | 3 | Number of manager nodes |
| workers | number | No | - | Number of worker nodes |
| encrypted | boolean | No | true | Encrypt overlay networks |
Cluster Setup
Initialize Swarm
docker swarm init --advertise-addr <MANAGER_IP>
docker swarm join-token worker
docker swarm join-token manager
docker swarm join --token <WORKER_TOKEN> <MANAGER_IP>:2377
docker swarm join --token <MANAGER_TOKEN> <MANAGER_IP>:2377
High Availability (3 or 5 managers)
Service Deployment
Basic Service
docker service create \
--name webapp \
--replicas 3 \
--publish 80:80 \
nginx:alpine
docker service scale webapp=5
docker service update --image nginx:1.25-alpine webapp
docker service rollback webapp
Full Service Configuration
docker service create \
--name api \
--replicas 3 \
--network backend \
--publish 8080:3000 \
--mount type=volume,source=data,target=/data \
--secret db_password \
--env NODE_ENV=production \
--limit-cpu 0.5 \
--limit-memory 512M \
--update-delay 10s \
--update-parallelism 1 \
--update-failure-action rollback \
--health-cmd "curl -f http://localhost:3000/health" \
--health-interval 30s \
myapp:latest
Stack Deployment
Production Stack
services:
frontend:
image: frontend:${VERSION:-latest}
deploy:
replicas: 3
placement:
constraints:
- node.role == worker
update_config:
parallelism: 1
delay: 10s
failure_action: rollback
resources:
limits:
cpus: '0.5'
memory: 256M
ports:
- "80:80"
networks:
- frontend
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
backend:
image: backend:${VERSION:-latest}
deploy:
replicas: 3
secrets:
- db_password
networks:
- frontend
-
docker stack deploy -c stack.yaml myapp
docker stack services myapp
docker stack rm myapp
Secrets & Configs
Secrets
echo "password" | docker secret create db_password -
docker service update --secret-add db_password myservice
echo "newpassword" | docker secret create db_password_v2 -
docker service update \
--secret-rm db_password \
--secret-add source=db_password_v2,target=db_password \
myservice
Configs
docker config create nginx_config ./nginx.conf
docker service create \
--config source=nginx_config,target=/etc/nginx/nginx.conf \
nginx
Node Management
docker node ls
docker node update --availability drain <node>
docker node update --availability active <node>
docker node update --label-add role=database <node>
docker node promote <node>
docker node demote <node>
Error Handling
Common Errors
| Error | Cause | Solution |
|---|
no suitable node | Constraints not met | Relax or add nodes |
not converging | Health check failing | Check service logs |
Raft: no leader | Quorum lost | Restore managers |
Manager Recovery
docker swarm init --force-new-cluster --advertise-addr <IP>
Troubleshooting
Debug Checklist
Diagnostics
docker service ls
docker service ps <service> --no-trunc
docker service logs -f <service>
docker node inspect <node> --pretty
Usage
Skill("docker-swarm")
Assets
assets/swarm-stack.yaml - Stack template
scripts/swarm-init.sh - Init script
Related Skills
- docker-networking
- docker-security
- docker-production