Docker Swarm
Docker Swarm is Docker's built-in orchestration tool for managing container clusters.
Initializing a Swarm
# Initialize the swarm
docker swarm init
# Initialize with a specific IP
docker swarm init --advertise-addr 192.168.1.100
# View nodes
docker node ls
Service Management
# Create a service
docker service create --name web --replicas 3 -p 80:80 nginx
# View services
docker service ls
# View service details
docker service ps web
# Scale a service
docker service scale web=5
# Update a service
docker service update --image nginx:1.25 web
# Delete a service
docker service rm web
Stack Deployment
# Deploy a stack from a compose file
docker stack deploy -c docker-compose.yml myapp
# View stacks
docker stack ls
# View services in a stack
docker stack services myapp
# Delete a stack
docker stack rm myapp
Use Case: Application Swarm
# docker-compose.yml (Swarm mode)
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: on-failure
networks:
- frontend
api:
build: ./backend
deploy:
replicas: 2
resources:
limits:
cpus: '0.5'
memory: 256M
networks:
- backend
database:
image: postgres:15
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints:
- node.labels.db == true
networks:
frontend:
backend:
volumes:
db-data:
Everyday Use Case
Case: Deploy an application to a cluster.
# Initialize the swarm
docker swarm init
# Deploy the stack
docker stack deploy -c docker-compose.yml myapp
# View the status
docker stack services myapp
# Scale a service
docker service scale myapp_api=5
Best Practices
- Use stack files: For reproducible deployments
- Placement constraints: Define where a service runs
- Update policy: Use rolling updates
- Resource limits: Set CPU and memory
- Health checks: For fault tolerance
Troubleshooting
Service won't start
# Check the service logs
docker service logs web
# Check the failed task
docker service ps web --filter "desired-state=shutdown"
# Inspect the service
docker service inspect web
Conclusion
Docker Swarm provides simple orchestration for multi-container applications. It is suitable for simple to medium-sized deployments.