Docker Compose — tool для defining + running multi-container apps через single YAML file. Удобен для local dev (app + DB + Redis + nginx) и small production deployments. В 2024 rewrite под Compose v2 (Go, integrated в Docker CLI). Commands: docker compose up, down, logs, exec. Для production + scale — migrate to Kubernetes или Docker Swarm.
Ниже: пошаговая инструкция, рабочие примеры, типичные ошибки, FAQ.
docker-compose.yml в корне проектаvolumes: { pg_data: {} }, - pg_data:/var/lib/postgresqldocker compose up -d — start в background. logs -f — tail logs.env loaded автоматически, или env_file: .env.prod| Сценарий | Конфиг |
|---|---|
| Basic web + DB | services:
app:
build: .
ports: ["3000:3000"]
env_file: .env
depends_on:
db: { condition: service_healthy }
db:
image: postgres:16-alpine
volumes:
- pg_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: ${DB_PASS}
healthcheck:
test: ["CMD", "pg_isready"]
interval: 5s
volumes:
pg_data: |
| Full stack: app + DB + Redis + nginx | services:
nginx:
image: nginx:alpine
ports: ["80:80"]
volumes: [./nginx.conf:/etc/nginx/nginx.conf:ro]
depends_on: [app]
app:
build: .
environment:
- DATABASE_URL=postgres://app:pass@db:5432/mydb
- REDIS_URL=redis://cache:6379
depends_on: [db, cache]
db:
image: postgres:16
volumes: [pg_data:/var/lib/postgresql/data]
cache:
image: redis:7-alpine
volumes:
pg_data: |
| Scale horizontally | docker compose up -d --scale app=5 # 5 instances of app
# Nginx upstream для load balancing между ними |
| Override для dev vs prod | # docker-compose.override.yml (dev)
services:
app:
volumes: [.:/app] # hot reload via code mount
command: npm run dev
# docker-compose.prod.yml
services:
app:
build: .
command: npm run start
# Use: docker compose -f docker-compose.yml -f docker-compose.prod.yml up |
| Exec command в running container | docker compose exec app bash
docker compose exec db psql -U app -d mydb |
docker-compose) deprecated. V2 — docker compose (space)Compose: single host, dev, small prod. K8s: multi-host, auto-scaling, HA. Порог миграции: >3 services + >1 host + need auto-scaling = K8s.
Services в одном compose file автоматически в shared network. Access через service name (hostname). External: expose ports через <code>ports:</code>.
Для small apps (side projects, internal tools) — yes. Для serious business — оставить dev-only, migrate в K8s для prod.
Podman — daemonless Docker-compatible. Podman Compose — работает с docker-compose.yml. Для rootless Linux — preferable.