Docker Compose описує багатоконтейнерне оточення одним файлом: сервіси, мережі, томи, секрети. Одна команда docker compose up піднімає все разом.
# compose.yaml
services:
app:
build: .
ports:
- "127.0.0.1:8000:8000"
environment:
DB_HOST: postgres
depends_on:
postgres:
condition: service_healthy
volumes:
- .:/var/www/html
postgres:
image: postgres:18
environment:
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]
interval: 5s
volumes:
pgdata:
Основні розділи верхнього рівня:
services- контейнери з образом чи інструкціями збирання, портами, змінними, томами, залежностями;volumes- іменовані томи для даних, що мають переживати перестворення контейнерів;networks- мережі (за замовчуванням створюється одна для всього проєкту);secrets,configs- файли конфігурації й секретів;name- назва проєкту (префікс для контейнерів, мереж, томів).
Чому без version: колись файли починалися з version: "3.8", і версія визначала доступні можливості. Тепер Compose реалізує єдину Compose Specification - поле version застаріле й ігнорується. Сучасний Compose виводить попередження: «the attribute version is obsolete». Його можна просто видалити.
Назва файлу: рекомендована - compose.yaml (також підтримуються compose.yml і старі docker-compose.yml). Команда - docker compose (вбудований плагін, Compose v2), а не окрема програма docker-compose першої версії.
Корисні команди:
docker compose up -d # запустити у фоні
docker compose ps # стан сервісів
docker compose logs -f app # логи сервісу
docker compose down # зупинити й видалити контейнери й мережі (томи лишаються)
docker compose config # підсумкова конфігурація після підстановки змінних і злиття файлів
docker compose config - найкорисніша команда для налагодження: показує, що Compose реально «бачить».