Docker & Containers

Orchestration Made Simple with Docker Swarm

Lesson 6 of 9 · 10 min · Intermediate

Running one container is easy. Running many containers across many servers? That’s where things get messy. Docker Swarm groups multiple hosts into a single cluster to handle load balancing, scaling, and high availability seamlessly.

What is Docker Swarm?

Modern apps don’t run as one container — they need many copies on many servers. Swarm is Docker’s built-in orchestration tool. You tell it what you want, and Swarm decides where it runs.

Core Cluster Concepts

  • Swarm Mode A special Docker mode that enables clustering capabilities via docker swarm init.
  • Manager Node The brain of the cluster. It decides where containers run, handles scaling, and maintains state. There is only one leader at a time.
  • Worker Node The muscle. Executes containers and follows the manager’s instructions. Does not make routing decisions.

Setting Up the Swarm

terminal

# 1. On the Manager Node
$ docker swarm init --advertise-addr <IP>
Swarm initialized: current node is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-49nj... 192.168.1.10:2377

# 2. On the Worker Nodes (paste the token generated above)
$ docker swarm join --token <token> <manager-ip>:2377
This node joined a swarm as a worker.

# 3. Verify the Cluster (run on Manager)
$ docker node ls

Built-in Ingress Overlay

Docker Swarm automatically creates an ingress overlay network. Containers on entirely different physical machines can talk to each other seamlessly. If a user hits Node2 on port 80, but the container is actually on Node1, Swarm automatically routes the traffic.

Services & Auto-Scaling

In Swarm, you don’t run containers directly. You create services. A service says: “Run this container, this many times, and keep it alive no matter what.”

Replicated Mode

You decide the exact number of containers (e.g., --replicas 5). Swarm distributes them dynamically. Best for web apps, APIs, and microservices.

Global Mode

Runs exactly one container per node. Automatically deploys a new container if a new node joins. Best for monitoring agents, log collectors, or security scanners.

terminal

# Create a Replicated Service
$ docker service create --replicas 2 -p 80:80 --name myweb nginx

# Zero-Downtime Scaling
# Need to handle a sudden traffic spike?
$ docker service scale myweb=5

# Rolling Updates
# Updates containers one-by-one safely
$ docker service update --image nginx:1.25 myweb

# Emergency Rollback
# Pushed a bad update? Revert instantly
$ docker service rollback myweb

Node Management

ActionCommandWhat it doesAnalogy
Promotedocker node promote worker2Upgrades a worker to a manager.Employee gets promoted to Manager.
Demotedocker node demote manager2Downgrades a manager to a worker.Manager steps down to regular staff.
Draindocker node update --availability drain worker2Evicts all running tasks and moves them to other nodes.Shop closed for maintenance, orders go elsewhere.
Pausedocker node update --availability pause worker2Keeps current tasks running, but accepts no new tasks.Shop open, but rejecting new orders right now.