Docker Compose: многоконтейнерные приложения
Docker Compose позволяет описать и запустить несколько связанных контейнеров одной командой через YAML-файл
Почему это важно: реальные приложения состоят из нескольких сервисов. Compose стандартизирует локальную разработку: вся команда работает в одинаковом окружении
Главная идея
docker-compose.yml описывает сервисы, их зависимости, тома и сети. docker compose up поднимает всё окружение за секунды
Как это выглядит на практике
- Создаём docker-compose.yml с сервисами: app (Rails), db (PostgreSQL), redis (Redis).
- services.app.depends_on: [db, redis] — Compose запускает зависимости первыми.
- services.db.volumes: [postgres_data:/var/lib/postgresql/data] — постоянное хранение данных.
- docker compose up --build — сборка и запуск всех сервисов.
- docker compose logs -f app — логи конкретного сервиса в реальном времени.
Что происходит под капотом
- Compose создаёт изолированную Docker-сеть для проекта; сервисы доступны по именам (db, redis).
- depends_on контролирует порядок запуска, но не ждёт готовности сервиса (только старт контейнера).
- docker compose down --volumes удаляет контейнеры и все тома — для полной очистки.
- Compose автоматически подгружает .env файл из текущей директории для подстановки переменных.
- docker compose exec app rails console — запуск команды внутри работающего сервиса.
Типичные ошибки и заблуждения
- Ошибка: depends_on гарантирует, что БД готова принимать соединения. Нет — только что контейнер запущен. Нужен healthcheck.
- Ошибка: Compose только для разработки. docker compose работает в продакшене для небольших сервисов.
- Ошибка: порты сервисов нужно всегда маппить в ports. Внутри сети Compose сервисы общаются без маппинга.
- Ошибка: docker-compose.yml и docker compose — разные инструменты. docker-compose — отдельная утилита v1; docker compose (без дефиса) — встроенный плагин v2.
Ключевые выводы
- docker-compose.yml — единственный источник правды об окружении проекта.
- Сервисы внутри Compose-сети обращаются друг к другу по именам сервисов.
- depends_on + healthcheck = правильное ожидание готовности зависимостей.
- docker compose down --volumes очищает данные; осторожно в продакшене.
Термины урока
Связь с работой backend-разработчика
docker-compose.yml должен быть в каждом backend-проекте. README с 'docker compose up' вместо страницы инструкций по настройке — это стандарт хорошего проекта.
Мини-разбор реальной ситуации
Новый разработчик присоединяется к проекту. Без Compose: 2 часа настройки PostgreSQL, Redis, правки конфигов. С Compose: git clone → docker compose up → приложение работает на localhost за 3 минуты. Compose-файл — документация окружения, выраженная в коде.
Что запомнить
- Один docker-compose.yml описывает всё локальное окружение.
- Сервисы внутри сети Compose видят друг друга по именам: host=db.
- depends_on + healthcheck обеспечивают правильный порядок старта.
Итог
Docker Compose — незаменимый инструмент для локальной разработки. Он превращает сложную настройку окружения в одну команду.