Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

TaskCommand
Init swarmdocker swarm init
Join swarmdocker swarm join
List nodesdocker node ls
Drain a nodedocker node update --availability drain <id>
Promote nodedocker node promote <id>
Demote nodedocker node demote <id>
Create servicedocker service create --name web -p 80:80 nginx
Scale servicedocker service scale web=3
Remove servicedocker service rm web