Docker Swarm
Docker Swarm is Docker’s native clustering and orchestration tool. It lets you manage a group of Docker hosts (nodes) as a single, virtual Docker engine, enabling scaling, high availability, and fault tolerance.
With Docker Swarm, you can:
- Run the same services across multiple machines
- Automatically distribute containers (called services) across nodes
- Scale services up or down easily
- Deploy a full application stack using a single file (
docker-compose.yml
) - Maintain zero-downtime updates via rolling deployments
Think of Swarm as a self-organising, load-balanced Docker cluster.
Swarm Basics
Initialise a Swarm
docker swarm init
- Promotes your current machine to a manager node
- Outputs a
docker swarm join
command for other nodes
Join a Swarm (Worker or Manager)
docker swarm join --token <token> <manager-ip>:2377
Get the token using:
docker swarm join-token worker
docker swarm join-token manager
Leave a Swarm
docker swarm leave
Force-leave if manager:
docker swarm leave --force
Node Management
List Swarm Nodes
docker node ls
Inspect a Node
docker node inspect <node-id>
Drain a Node (prevent it from running containers)
docker node update --availability drain <node-id>
Re-enable a Node
docker node update --availability active <node-id>
Promote/Demote Manager/Worker
docker node promote <node-id>
docker node demote <node-id>
Services
Services are the units of scheduling in Swarm — like containers, but designed to scale and self-heal across the cluster.
Create a Service
docker service create --name web --replicas 3 -p 80:80 nginx
List Services
docker service ls
Inspect a Service
docker service inspect <service-name>
View Service Tasks (like individual containers)
docker service ps <service-name>
Update a Service
docker service update --image nginx:alpine web
Scale a Service
docker service scale web=5
Remove a Service
docker service rm web
Further Reading
Docker Swarm Cheat Sheet
Task | Command |
---|---|
Init swarm | docker swarm init |
Join swarm | docker swarm join |
List nodes | docker node ls |
Drain a node | docker node update --availability drain <id> |
Promote node | docker node promote <id> |
Demote node | docker node demote <id> |
Create service | docker service create --name web -p 80:80 nginx |
Scale service | docker service scale web=3 |
Remove service | docker service rm web |