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