# devops / orchestration / swarm

Orchestration Made Simple with Docker Swarm

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.

$ docker node ls
HOSTNAMESTATUS      MANAGER STATUS
node-1 *Ready       Leader
node-2Ready       
node-3Ready       
3
Total Nodes
Active
Swarm State
# introduction

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.

PIZZA ANALOGY

One Pizza Shop → One standalone Docker host.
Many Shops → A Swarm cluster.
Shop Manager → The Swarm Manager assigning orders to workers.

FUN FACT

Kubernetes is more powerful, but Docker Swarm is significantly easier to learn and set up, especially if you already know basic Docker commands.

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.

# cluster-setup

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
networking

🌐 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

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
# operations

Node Management

Action Command What it does Analogy
Promote docker node promote worker2 Upgrades a worker to a manager. Employee gets promoted to Manager.
Demote docker node demote manager2 Downgrades a manager to a worker. Manager steps down to regular staff.
Drain docker node update --availability drain worker2 Evicts all running tasks and moves them to other nodes. Shop closed for maintenance, orders go elsewhere.
Pause docker node update --availability pause worker2 Keeps current tasks running, but accepts no new tasks. Shop open, but rejecting new orders right now.