Открыть сервис

Docker Compose

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

История

Docker Compose изначально был разработан как сторонний проект под названием Fig компанией Orchard Laboratories в 2013 году. Fig предоставлял простой способ оркестрации контейнеров с использованием YAML-файла. В 2014 году Docker Inc. приобрела Orchard Laboratories, и проект был переименован в Docker Compose. Первая версия Compose (v1) была интегрирована в экосистему Docker как отдельный инструмент, устанавливаемый через pip или загружаемый как бинарный файл.

С развитием Docker Compose претерпел значительные изменения. В 2020 году вышла версия Compose v2, которая была переписана на языке Go и интегрирована непосредственно в клиент Docker (docker compose). Это позволило избавиться от необходимости установки отдельного пакета и ускорило выполнение команд. Начиная с Docker Desktop и Docker Engine версии 20.10+, docker compose является встроенной командой.

Основные понятия

Сервисы (Services)

Сервис — это логическая единица приложения, представляющая собой один или несколько контейнеров, созданных из одного образа. Каждый сервис описывает, какой образ использовать, какие порты открывать, какие переменные окружения задавать и как он взаимодействует с другими сервисами.

Сети (Networks)

Docker Compose автоматически создаёт изолированную сеть для приложения, в которой все сервисы могут общаться друг с другом по именам сервисов (DNS-резолвинг). Пользователь может определить собственные сети с различными драйверами (bridge, overlay, macvlan) и настройками.

Тома (Volumes)

Тома используются для сохранения данных, создаваемых контейнерами, и для обмена данными между контейнерами и хост-системой. Compose позволяет определять именованные тома и монтировать их в контейнеры.

Проект (Project)

Проект — это совокупность сервисов, сетей и томов, определённых в одном файле docker-compose.yml. Каждый проект имеет уникальное имя (по умолчанию — имя директории, в которой находится файл), что позволяет запускать несколько изолированных экземпляров одного и того же приложения на одном хосте.

Файл конфигурации docker-compose.yml

Файл конфигурации пишется в формате YAML. Основные секции:

  • version (устарело в Compose v2) — указывает версию схемы файла.
  • services — определяет список сервисов.
  • networks — определяет пользовательские сети.
  • volumes — определяет именованные тома.
  • configs — для передачи конфигурационных файлов.
  • secrets — для управления секретами.

Пример минимального файла для веб-приложения с веб-сервером и базой данных:

```yaml services: web: image: nginx:latest ports:

  • "80:80"

volumes:

  • ./html:/usr/share/nginx/html

depends_on:

  • db

db: image: postgres:15 environment: POSTGRES_PASSWORD: example volumes:

volumes: pgdata: ```

Основные команды

Docker Compose предоставляет набор команд для управления жизненным циклом приложения:

  • docker compose up — создаёт и запускает все сервисы. С флагом -d работает в фоновом режиме.
  • docker compose down — останавливает и удаляет контейнеры, сети и, при необходимости, тома.
  • docker compose ps — показывает состояние контейнеров проекта.
  • docker compose logs — выводит логи всех сервисов или конкретного сервиса.
  • docker compose exec — выполняет команду внутри работающего контейнера.
  • docker compose build — собирает образы для сервисов, если указана директива build.
  • docker compose pull — загружает образы, указанные в конфигурации.
  • docker compose restart — перезапускает сервисы.

Классификация и варианты использования

По среде применения

  • Локальная разработка — наиболее распространённый сценарий. Compose позволяет разработчику быстро поднять всё окружение (БД, кэш, очереди) на своей машине.
  • Тестирование — в CI/CD пайплайнах Compose используется для запуска интеграционных тестов в изолированном окружении.
  • Односерверные продакшн-среды — на небольших проектах или при стартапе Compose может применяться для развёртывания на одном сервере, если нет необходимости в полноценной оркестрации (Kubernetes, Docker Swarm).

По структуре приложения

  • Веб-приложение + база данных — классическая связка (например, nginx + PHP-FPM + MySQL).
  • Микросервисная архитектура — несколько независимых сервисов, общающихся по API (например, сервис аутентификации, сервис заказов, сервис уведомлений).
  • Набор утилит — например, связка из самого приложения, Redis для кэширования, Elasticsearch для поиска и Kibana для визуализации.

Преимущества и недостатки

Преимущества

  • Простота — для запуска сложного приложения достаточно одной команды.
  • Воспроизводимость — конфигурация хранится в репозитории, что гарантирует одинаковое окружение у всех разработчиков.
  • Изоляция — каждый проект работает в своей сети и не конфликтует с другими.
  • Гибкость — возможность переопределять параметры через переменные окружения и файлы .env.
  • Интеграция с Docker — полная совместимость с существующими образами и инструментами.

Недостатки

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

Сравнение с другими инструментами

ИнструментНазначениеУровень сложностиМасштабируемость
Docker ComposeМногоконтейнерные приложения на одном хостеНизкийНизкая
Docker SwarmКластеризация Docker на нескольких хостахСреднийСредняя
KubernetesПолноценная оркестрация контейнеровВысокийВысокая
Podman ComposeАльтернатива Compose для PodmanСреднийСредняя

Интересные факты

  • Docker Compose поддерживает профили (profiles), позволяющие включать или отключать группы сервисов при запуске. Например, можно определить профиль dev с инструментами отладки и профиль prod без них.
  • Файл docker-compose.yml может включать в себя другие файлы с помощью директивы include, что позволяет разбивать большие конфигурации на модули.
  • Compose v2 полностью обратно совместим с синтаксисом Compose v1, но рекомендуется использовать новую версию для лучшей производительности.
  • Существует проект compose-spec (Compose Specification), который стандартизирует формат файла для использования в различных инструментах, включая Docker, Podman и другие.

Источники

  • Официальная документация Docker Compose (docs.docker.com/compose)
  • Docker Compose Specification (compose-spec.io)
  • Статья «The Story of Docker Compose» — блог Docker Inc.
  • Документация Docker Engine и Docker Desktop

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →