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