Docker Compose

Docker Compose for multi-container service orchestration, builds, and environment layering.

Service Lifecycle

Start and stop services
docker compose up -d                   # start all services detached
docker compose up -d --build           # rebuild images before starting
docker compose down                    # stop and remove containers + networks
docker compose down -v                 # also remove named volumes
docker compose down --rmi all          # also remove images
Restart and recreate
docker compose restart nginx           # restart single service
docker compose up -d --force-recreate  # recreate even if config unchanged
docker compose up -d nginx             # start/recreate one service only

Logs and Debugging

Follow service logs
docker compose logs -f                 # all services
docker compose logs -f nginx           # single service
docker compose logs --tail 50 nginx    # last 50 lines
docker compose logs --since 10m        # last 10 minutes
Exec into running service
docker compose exec nginx sh           # shell into service container
docker compose exec db psql -U postgres # run command in service

Status and Inspection

Check running services
docker compose ps                      # service status
docker compose ps -a                   # include stopped
docker compose top                     # running processes per service
Validate compose file
docker compose config                  # parse and render final config
docker compose config --services       # list service names only

Build

Build images defined in compose file
docker compose build                   # build all services with build: key
docker compose build --no-cache nginx  # force fresh build for one service
docker compose build --pull            # pull base images before building

Patterns

Kroki diagram server for Antora builds
# compose.yaml for local documentation builds
# services: kroki, mermaid, bpmn, excalidraw
docker compose -f kroki-compose.yaml up -d
make                                   # Antora build with Kroki running
docker compose -f kroki-compose.yaml down
Override files for environment layering
# docker compose automatically merges:
#   compose.yaml + compose.override.yaml
docker compose -f compose.yaml -f compose.prod.yaml up -d   # explicit override
Run one-off commands against a service
docker compose run --rm web python manage.py migrate   # run and remove
docker compose run --rm -e DEBUG=1 web pytest           # with env override