Docker Compose
Compose — декларативное описание мульти-контейнерных приложений. Один docker-compose.yml вместо десятка docker run. Изначально Python-скрипт, теперь — Go-плагин (docker compose без дефиса).
Пример
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html:ro
depends_on:
- api
api:
build: ./api
environment:
DB_HOST: db
restart: unless-stopped
db:
image: postgres:16
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_pass
volumes:
- dbdata:/var/lib/postgresql/data
secrets:
- db_pass
volumes:
dbdata:
secrets:
db_pass:
file: ./secrets/db_password.txt
Команды
docker compose up -d # запустить в фоне
docker compose down # остановить и удалить
docker compose ps # статус
docker compose logs -f api # логи
docker compose exec api sh # шелл
docker compose build # пересобрать
docker compose pull # обновить
Сеть
Compose создаёт отдельную bridge-сеть для проекта. Сервисы обращаются по имени (db, api). DNS резолвится автоматически.
Профили
services:
web: {...}
db: {...}
dev-tools:
image: adminer
profiles: [dev]
docker compose up # без dev-tools
docker compose --profile dev up # с dev-tools
Override files
docker-compose.override.yml автоматически мержится. Prod-config чистым, dev-настройки — в override (gitignored).
Compose Spec
С 2020 — открытая спецификация compose-spec.io. Podman, nerdctl, buildx-bake используют тот же YAML.
Compose vs Kubernetes
| Compose | K8s | |
|---|---|---|
| Для | dev, small prod | кластеры, HA |
| Порог входа | низкий | высокий |
| Мультихост | Swarm или ничего | да |
| Автоскейлинг | нет | HPA/VPA |