Зачем нужен Docker Compose
Почему ручной запуск нескольких контейнеров неудобен и как Compose решает эту проблему.
Docker Compose — инструмент для описания и запуска многоконтейнерных приложений из одного YAML-файла.
Боль ручного запуска
Реальное приложение — это редко один контейнер. Обычно есть бэкенд, база данных, иногда кэш и веб-сервер. Запускать их вручную утомительно: для каждого нужно помнить флаги, сеть, тома, порядок. Пример всего из двух сервисов:
docker network create app-net
docker run -d --name db --network app-net \
-e POSTGRES_PASSWORD=secret \
-v pgdata:/var/lib/postgresql/data postgres:16
docker run -d --name api --network app-net \
-p 8000:8000 -e DATABASE_URL=postgresql://postgres:secret@db:5432/postgres \
my-app:1.0
Это нужно помнить и повторять каждый раз. А если сервисов пять? Команды разрастаются, ошибки неизбежны.
Решение: описать стек в файле
Compose позволяет описать весь набор сервисов, их сети, тома и переменные в одном файле compose.yaml. После этого весь стек поднимается одной командой:
docker compose up -d
Та же конфигурация, что выше, превращается в декларативный файл, который хранится в репозитории и читается как документация к запуску проекта.
docker compose, а не docker-compose
Современный Compose встроен в Docker как подкоманда — пишут docker compose (через пробел, версия v2). Старый отдельный бинарник docker-compose (через дефис) считается устаревшим. В этом курсе используем актуальный вариант.
Что даёт Compose
- Одна команда поднимает и останавливает весь стек.
- Декларативность: конфигурация в файле, а не в памяти.
- Автоматическая сеть: Compose сам создаёт общую сеть, сервисы видят друг друга по имени.
- Воспроизводимость: любой разработчик поднимет тот же стек.
Итог
- Ручной запуск нескольких контейнеров громоздок и подвержен ошибкам.
- Compose описывает весь стек в
compose.yamlи поднимает его одной командой. - Актуальная команда —
docker compose(v2), а не устаревшийdocker-compose.