Короткий ответ
docker-compose — инструмент для описания и запуска нескольких связанных контейнеров (приложение, PostgreSQL, Redis) одной командой из единого YAML-файла; он решает проблему локальной разработки, когда приложению нужна инфраструктура, которую неудобно поднимать вручную.
Как это работает подробнее
docker-compose.yml описывает набор сервисов, их образы, переменные окружения, порты и volume, а также сеть, в которой контейнеры видят друг друга по имени сервиса; docker compose up строит и запускает все сервисы с учётом зависимостей.
Пример кода
config.yaml
services:
web:
build: .
ports: ["8000:8000"]
environment:
DATABASE_URL: postgresql://app:app@db:5432/app
depends_on: [db]
db:
image: postgres:16
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: app
POSTGRES_DB: app
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:Что использовать на практике
- Рекомендация. сервис обращается к базе по имени сервиса из файла, а не по
localhost, благодаря внутреннему DNS Docker; volume используют, чтобы данные БД не терялись при пересоздании контейнера.
Подводные камни
- Риск. использовать docker-compose как production-оркестратор для масштабирования — он для локальной разработки;
depends_onне гарантирует полную готовность зависимого сервиса, для этого нужны health-check и retry-логика.