Skip to main content

Docker Swarm Cheatsheet

·788 words·4 mins·
Photo by City Church Christchurch on Unsplash
This cheatsheet is a quick reference for Docker Swarm in the real world. It covers cluster bootstrapping, node management, services, stacks, secrets, configs, overlay networking, and the commands you need to operate a small Swarm cluster confidently.

Swarm Basics
#

docker swarm init                            # Initialize a new swarm on the current node
docker swarm init --advertise-addr 10.0.0.10 # Specify the address for other nodes to connect
docker swarm join-token manager              # Show manager join command
docker swarm join-token worker               # Show worker join command
docker swarm leave                           # Leave the swarm
docker swarm leave --force                   # Force leave a manager

Node Management
#

docker node ls                                  # List swarm nodes
docker node inspect <node>                      # Inspect a node
docker node ps <node>                           # List tasks running on a node
docker node promote <node>                      # Promote worker to manager
docker node demote <node>                       # Demote manager to worker
docker node update --availability drain <node>  # Drain a node for maintenance
docker node update --availability active <node> # Make a node active again
docker node rm <node>                           # Remove a node from the swarm, only works if node has no running tasks or is drained

Services
#

docker service create --name web -p 80:80 nginx:alpine # Creates 1 replica by default
docker service scale web=3                    # Scale replicas
docker service ls                             # List services
docker service ps web                         # List tasks for a service
docker service inspect web                    # Inspect service details
docker service logs web                       # Show service logs
docker service update --image nginx:1.27 web  # Update service image
docker service update --replicas 5 web        # Update number of replicas
docker service rollback web                   # Roll back to previous spec
docker service rm web                         # Remove a service

Service Placement And Availability
#

docker service create \
  --name api \
  --constraint 'node.role==worker' \
  --replicas 2 \
  myapi:latest

docker service create \
  --name db \
  --placement-pref 'spread=node.labels.zone' \
  postgres:16

docker node update --label-add zone=west <node>
docker node update --label-add zone=east <node>

Stacks
#

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    deploy:
      replicas: 2
      mode: replicated  # Explicitly state replication mode
      update_config:
        parallelism: 1
        order: start-first
  redis:
    image: redis:7-alpine
    deploy:
      replicas: 1
docker stack deploy -c stack.yml mystack   # Deploy a stack
docker stack ls                            # List stacks
docker stack services mystack              # List stack services
docker stack ps mystack                    # List tasks in a stack
docker stack rm mystack                    # Remove a stack

Secrets And Configs
#

printf 'supersecret' | docker secret create db_password -
docker secret ls                    # List secrets
docker secret inspect db_password   # Inspect a secret
docker secret rm db_password        # Remove a secret

printf 'LOG_LEVEL=info' | docker config create app_config -
docker config ls                    # List configs
docker config inspect app_config    # Inspect a config
docker config rm app_config         # Remove a config

Overlay Networking
#

docker network create -d overlay frontend --attachable frontend  # Create overlay network
docker network ls                           # List networks
docker network inspect frontend             # Inspect network
docker service create --name web --network frontend nginx:alpine # Create service on overlay network

Rolling Updates
#

docker service update \
  --image nginx:1.27 \
  --update-parallelism 1 \
  --update-delay 10s \
  --update-order start-first \
  --stop-grace-period 30s \
  web

docker service update --rollback web
docker service update --force web     # Redeploy tasks without changing spec

Health And Troubleshooting
#

docker service ps web --no-trunc      # Show full task details
docker service inspect --pretty web   # Human-readable service summary
docker node inspect --pretty <node>   # Human-readable node summary
docker events                         # Watch swarm events
docker logs $(docker ps -q --filter name=web)  # Container logs on a node

Common Deployment Pattern
#

docker swarm init
docker network create -d overlay appnet
docker secret create db_password ./db_password.txt
docker stack deploy -c stack.yml app
docker stack ps app --no-trunc  # Check all tasks are healthy before proceeding
docker service ls
docker stack services app

Cleanup
#

docker stack rm app
docker service rm web
docker node rm <node>
docker swarm leave --force  # Destroys local cluster data! Only use --force when recovering from failed managers
docker system prune -a      # Remove unused objects on a node

Handy Tips
#

  • Manager Nodes: Keep them minimal (3 or 5). More managers increase Raft consensus overhead.
  • Stacks over Services: Prefer docker stack for multi-service apps; it handles dependencies and scaling better than individual service commands.
  • Secrets: Never bake secrets into images. Use Docker secrets which are encrypted at rest and mounted read-only.
  • Labels: Apply node labels early (zone, ssd, gpu) to make placement constraints readable and portable.
  • Testing: Always test –update-order and –rollback in a staging environment before production.
  • Quorum: If you lose more than half your managers, the cluster locks down. Have a documented recovery plan.