Docker Compose

Docker Compose — это инструмент оркестрации контейнеров, позволяющий описывать и запускать многоконтейнерные приложения с помощью одного YAML-файла. Он заменяет ручной ввод длинных команд docker run, автоматически настраивая Сеть, тома данных и переменные окружения для всех сервисов проекта.

Главное

  • Управление несколькими контейнерами как единым сервисом через декларативный файл конфигурации.
  • Автоматическое Создание изолированной сети, где сервисы общаются по именам, а не по IP-адресам.
  • Воспроизводимость окружения: одинаковый результат запуска на любом компьютере разработчика.
  • Поддержка профилирования и переопределения настроек для разных сред (dev, staging, prod).
  • Интеграция в CI/CD пайплайны для быстрого поднятия тестовых стендов с базами данных и кэшем.

Как работает Docker Compose

Docker Compose функционирует как локальный оркестратор, считывая структуру из файла docker-compose.yml. При выполнении команды docker compose up инструмент анализирует зависимости между сервисами и запускает их в правильном порядке. Каждый Контейнер получает уникальное имя, которое автоматически регистрируется во внутренней DNS-сети проекта. Это позволяет бэкенду обращаться к базе данных по имени сервиса, например postgres, без необходимости знать его динамический IP-адрес. Инструмент отслеживает изменения в конфигурации и пересоздает только те контейнеры, которые были затронуты обновлением файла.

Зачем нужен Docker Compose

Основная цель инструмента — устранение проблемы «у меня на машине работает», когда код функционирует у разработчика, но падает на сервере. Он стандартизирует среду разработки, исключая конфликты версий библиотек и системных зависимостей. Команда тратит меньше времени на настройку новых рабочих мест: достаточно клонировать Репозиторий и запустить одну команду. Для тестирования это означает возможность мгновенного поднятия чистой среды с реальными СУБД и очередями сообщений. В продакшене он используется для небольших проектов, где Сложность Kubernetes не оправдана операционными расходами.

Какие бывают виды Docker Compose

Существует два основных формата реализации: классическая утилита docker-compose (Python) и современный Плагин docker compose (Go), встроенный в CLI. Форматы файлов различаются версиями: v2 ориентирован на локальную разработку, а v3 добавляет поддержку масштабирования в кластерах Swarm. Также выделяют концепцию профилей, позволяющих активировать определенные группы сервисов флагом --profile. Разработчики часто используют Паттерн с двумя файлами: базовым docker-compose.yml и файлом переопределения docker-compose.override.yml, который игнорируется в системе контроля версий.

Где используется Docker Compose

Инструмент повсеместно применяется в локальной разработке Веб-приложений, связывающих фронтенд, Бэкенд, базы данных и очереди задач. Он является стандартом де-факто для интеграционных тестов в CI/CD пайплайнах, обеспечивая изоляцию проверок кода. Образовательные проекты и демо-стенды используют его для быстрого развертывания сложных стеков технологий. На производственных серверах он подходит для микросервисных архитектур малого масштаба или внутренних инструментов компании. Также он востребован для локального эмуляции микросервисной архитектуры, когда нужно протестировать взаимодействие только двух-трех компонентов.

Пример: установка и чтение Docker Compose

Для работы требуется установленный Docker Engine. Ниже приведен пример минимального файла конфигурации, описывающего Веб-сервер и базу данных PostgreSQL. Обратите внимание на секцию volumes, которая обеспечивает Сохранность данных при перезапуске контейнеров.

yaml
version: '3.8'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - db
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

Используйте команду docker compose config для проверки валидности YAML-файла перед запуском. Это поможет выявить синтаксические ошибки до начала развертывания сервисов.

Часто задаваемые вопросы Docker Compose

Часто задаваемые вопросы

Можно ли использовать Docker Compose для продакшена?

Да, для небольших проектов и монолитных приложений он отлично подходит. Однако для крупных распределенных систем рекомендуется переходить на Kubernetes или Docker Swarm, так как они предлагают более продвинутые механизмы балансировки нагрузки и автоматического восстановления после сбоев.

Как сохранить данные баз данных при удалении контейнеров?

Необходимо использовать именованные тома (named volumes). В примере выше том pgdata хранит данные вне контейнера. Даже если Контейнер будет удален или пересоздан, данные останутся доступными новому экземпляру сервиса.

В чем разница между docker-compose и docker compose?

Первое — это отдельная программа на Python, второе — Плагин внутри Docker CLI на Go. Плагин быстрее работает, имеет лучшую Производительность и поддерживается официально разработчиками Docker как основной инструмент управления.

Как отключить ненужные сервисы при запуске?

Используйте профили. Добавьте ключ profiles к сервисам в файле конфигурации. Затем запускайте проект с флагом --profile dev, чтобы активировать только нужную группу инструментов, например, логгеры или отладчики.

Итоги

Docker Compose остается незаменимым инструментом для локальной разработки и тестирования, значительно ускоряя процесс настройки инфраструктуры.

  • Позволяет управлять всем стеком приложения из одного текстового файла.
  • Автоматизирует Сетевое взаимодействие и монтирование томов данных.
  • Обеспечивает полную идентичность окружений на всех этапах разработки.
  • Поддерживает гибкую настройку через профили и файлы переопределения.
  • Является стандартом для интеграционного тестирования в современных пайплайнах.
  • Требует ручного управления ресурсами, что ограничивает его в крупных кластерах.
  • Идеален для стартапов и малых команд, стремящихся к быстрой доставке кода.