Docker Compose Cheatsheet

A comprehensive reference for Docker Compose configuration and commands. Docker Compose is a tool for defining and running multi-container Docker applications using a YAML file. This cheatsheet covers services, volumes, networks, environment variables, healthchecks, and CLI commands.

Docker Compose Cheatsheet

YAML configuration reference for multi-container apps

73

Snippets

8

Categories

0

Favorites

16

Sections

CLI
Basic Commands
docker compose up

Start all services

docker compose up -d

Start in detached mode

docker compose up --build

Build and start

docker compose down

Stop and remove containers

docker compose down -v

Also remove volumes

docker compose down --rmi all

Also remove images

docker compose ps

List containers

docker compose logs

View output from containers

docker compose logs -f [service]

Follow logs

CLI
Service Management
docker compose start

Start services

docker compose stop

Stop services

docker compose restart

Restart services

docker compose pause

Pause services

docker compose unpause

Unpause services

docker compose exec [service] bash

Execute command

docker compose run [service] [cmd]

Run one-off command

docker compose build

Build services

docker compose pull

Pull service images

💡 Use 'docker-compose' for older versions

Services
Service Definition
image: nginx:latest

Use image from registry

build: ./dir

Build from Dockerfile

build:
  context: ./dir
  dockerfile: Dockerfile.dev

Custom Dockerfile

container_name: my-app

Custom container name

restart: always

Restart policy

restart: unless-stopped

Restart unless stopped

restart: on-failure

Restart on failure

Services
Ports & Expose
ports:
  - "8080:80"

Map host:container port

ports:
  - "80"

Random host port

expose:
  - "3000"

Expose to linked services

Volumes
Volume Types
volumes:
  - ./host:/container

Bind mount

volumes:
  - data:/var/lib/data

Named volume

volumes:
  - /container/path

Anonymous volume

volumes:
  - ./config:/config:ro

Read-only mount

Volumes
Top-level Volumes
volumes:
  data:

Define named volume

volumes:
  data:
    driver: local

With driver

volumes:
  data:
    external: true

Use existing volume

Networks
Service Networks
networks:
  - frontend
  - backend

Join networks

networks:
  frontend:
    aliases:
      - api

Network alias

Networks
Top-level Networks
networks:
  frontend:

Define network

networks:
  frontend:
    driver: bridge

Bridge driver

networks:
  frontend:
    external: true

Use existing

networks:
  frontend:
    ipam:
      config:
        - subnet: 172.28.0.0/16

Custom subnet

Environment
Environment Variables
environment:
  - NODE_ENV=production

Set env var

environment:
  NODE_ENV: production

Map syntax

env_file:
  - .env

Load from file

env_file:
  - .env
  - .env.local

Multiple files

Environment
Variable Substitution
image: ${IMAGE_NAME}

Use shell variable

image: ${IMAGE:-nginx}

With default value

ports:
  - "${PORT}:80"

Variable in port

💡 Variables from .env file in same directory

Dependencies
Service Dependencies
depends_on:
  - db
  - redis

Start after services

depends_on:
  db:
    condition: service_healthy

Wait for healthy

depends_on:
  db:
    condition: service_started

Wait for started

depends_on:
  db:
    condition: service_completed_successfully

Wait for completion

Dependencies
Links (Legacy)
links:
  - db
  - redis:cache

Link containers

💡 Use networks instead of links

Healthcheck
Health Configuration
healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]

HTTP health check

healthcheck:
  test: ["CMD-SHELL", "pg_isready -U postgres"]

Shell command

healthcheck:
  interval: 30s

Check interval

healthcheck:
  timeout: 10s

Timeout duration

healthcheck:
  retries: 3

Retry count

healthcheck:
  start_period: 40s

Initial delay

healthcheck:
  disable: true

Disable healthcheck

Advanced
Resource Limits
deploy:
  resources:
    limits:
      cpus: '0.5'
      memory: 512M

CPU and memory limits

deploy:
  resources:
    reservations:
      cpus: '0.25'
      memory: 256M

Resource reservations

deploy:
  replicas: 3

Number of replicas

Advanced
Logging
logging:
  driver: json-file

JSON file driver

logging:
  options:
    max-size: "10m"
    max-file: "3"

Log rotation

logging:
  driver: none

Disable logging

Advanced
Other Options
command: ["npm", "start"]

Override command

entrypoint: /app/start.sh

Override entrypoint

working_dir: /app

Working directory

user: "1000:1000"

Run as user

privileged: true

Privileged mode

stdin_open: true

Keep STDIN open

tty: true

Allocate TTY

Quick Reference

Start

docker compose up -d

Stop

docker compose down

Logs

docker compose logs -f

Rebuild

docker compose up --build

Categories

  • CLI Commands

    Essential docker compose commands for managing containers.

  • Services

    Define containers, images, builds, ports, and commands.

  • Volumes

    Persist data and share files between host and containers.

  • Networks

    Configure networking between containers and external access.

  • Environment

    Set environment variables and use .env files.

  • Advanced

    Healthchecks, dependencies, labels, and more.

Basic Example

# docker-compose.yml
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    depends_on:
      - redis
  redis:
    image: redis:alpine