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 (without hyphen) instead of docker-compose.Docker Compose Cheatsheet
YAML configuration reference for multi-container apps
Snippets
Categories
Favorites
Sections
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
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
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
ports: - "8080:80"
Map host:container port
ports: - "80"
Random host port
expose: - "3000"
Expose to linked services
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: data:
Define named volume
volumes:
data:
driver: localWith driver
volumes:
data:
external: trueUse existing volume
networks: - frontend - backend
Join networks
networks:
frontend:
aliases:
- apiNetwork alias
networks: frontend:
Define network
networks:
frontend:
driver: bridgeBridge driver
networks:
frontend:
external: trueUse existing
networks:
frontend:
ipam:
config:
- subnet: 172.28.0.0/16Custom subnet
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
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
depends_on: - db - redis
Start after services
depends_on:
db:
condition: service_healthyWait for healthy
depends_on:
db:
condition: service_startedWait for started
depends_on:
db:
condition: service_completed_successfullyWait for completion
links: - db - redis:cache
Link containers
💡 Use networks instead of links
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
deploy:
resources:
limits:
cpus: '0.5'
memory: 512MCPU and memory limits
deploy:
resources:
reservations:
cpus: '0.25'
memory: 256MResource reservations
deploy: replicas: 3
Number of replicas
logging: driver: json-file
JSON file driver
logging:
options:
max-size: "10m"
max-file: "3"Log rotation
logging: driver: none
Disable logging
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
docker compose up -d
docker compose down
docker compose logs -f
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