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

Stack Basics

Docker Stacks let you deploy multi-service applications using a single docker-compose.yml file in Swarm mode.

Requires Docker Swarm to be initialised with docker swarm init.

Deploy a Stack

docker stack deploy -c docker-compose.yml mystack

List Stacks

docker stack ls

List Services in a Stack

docker stack services mystack

List Tasks (containers) in a Stack

docker stack ps mystack

Remove a Stack

docker stack rm mystack

Example docker-compose.yml for Stack

version: '3.8'
services:
  web:
    image: nginx
    ports:
      - "80:80"
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
      placement:
        constraints: [node.role == worker]

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - db_data:/var/lib/mysql
    deploy:
      placement:
        constraints: [node.role == manager]

volumes:
  db_data:

Deploy This Stack

docker stack deploy -c docker-compose.yml mystack

Stack Tips

  • Use deploy: section to define Swarm-specific settings (replicas, placement, restart policies, etc.)
  • Avoid build: in production stacks — use pre-built images.
  • Ensure all nodes have access to required networks, volumes, or images.
  • Stacks do not support all docker compose features — e.g., no depends_on or condition: directives in Swarm.

Docker stack deployment vs Compose

Featuredocker composedocker stack deploy
Designed forLocal developmentSwarm clusters
Deploys toSingle Docker daemonMultiple Swarm nodes
OrchestrationNoYes (replication, updates)
Rolling updates❌✅
Service restart logicMinimalAdvanced
NetworkingBridgeOverlay

Further Reading

Docker Stack Cheat Sheet

TaskCommand
Deploy a stackdocker stack deploy -c docker-compose.yml mystack
List stacksdocker stack ls
List services in a stackdocker stack services mystack
List running containers/tasksdocker stack ps mystack
Remove a stackdocker stack rm mystack