Гид по технологиям

Docker Compose: руководство по использованию и практике

7 min read Контейнеризация Обновлено 09 Jan 2026
Docker Compose: полное руководство
Docker Compose: полное руководство

Docker Compose позволяет описывать и запускать многоконтейнерные приложения на одном хосте с помощью файла docker-compose.yaml. В статье объяснено, как устроен файл YAML, какие команды чаще всего нужны, лучшие практики, ограничения и сценарии, когда выбирать альтернативы вроде Kubernetes.

логотип Docker: кит, несущий контейнеры на спине, на тёмном фоне с золотыми надписями

Что такое Docker Compose

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

Определения в одну строку:

  • Контейнер — изолированный процесс с файловой системой и сетевыми настройками.
  • Сервис — логическая роль в приложении, запускаемая как контейнер.
  • tom/volume — постоянное хранилище для данных между перезапусками.

Зачем использовать Docker Compose

  • Быстро собрать локальную среду разработки для full‑stack приложения.
  • Описать stack для тестов CI и интеграционных прогонов.
  • Упрощённое управление зависимостями между сервисами без написания отдельного оркестрационного кода.

Важно: Compose оптимален для одного хоста и небольших production окружений. Для распределённой оркестрации подойдёт Kubernetes или Docker Swarm.

Проверка наличия Docker Compose

Docker Compose обычно идёт в составе установки Docker Desktop на macOS и Windows или как отдельный плагин для Linux. Чтобы проверить установку, выполните:

docker-compose version

Команда вернёт версию docker-compose и сопутствующую информацию.

вывод команды docker-compose version с результатом

Если Compose отсутствует, установите Docker Engine, затем следуйте официальной инструкции установки Compose для вашей ОС.

Структура файла docker-compose.yaml

Compose использует YAML для описания конфигурации. Файл обычно называется docker-compose.yaml и находится в корне проекта.

Короткая схема:

version: '3.9'
services:
  web:
    build: .
    ports:
      - '8080:8080'
    volumes:
      - './data:/var/data'
  database:
    image: 'redis:alpine'
    environment:
      - 'USERNAME=yourUser'
      - 'PASSWORD=p@wen'

Обязательные понятия:

  • version — версия формата Compose.
  • services — список сервисов (каждый сервис станет контейнером или набором контейнеров).
  • build — путь к Dockerfile или объект build с контекстом и dockerfile.
  • image — имя образа, если не требуется локальная сборка.
  • ports — маппинг портов host:container.
  • volumes — связи томов между хостом и контейнером.
  • environment — переменные окружения.

Советы по написанию YAML:

  • Используйте относительный путь в build, чтобы конфигурация была переносимой.
  • Не храните секреты в файле; используйте .env или секреты Docker для production.
  • Разделяйте dev и prod конфигурации с помощью docker-compose.override.yaml или профилей.

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

набор команд docker-compose с иконками

  • Сборка образов
docker-compose build
  • Запуск сервиса (однократный запуск с аргументом) или контейнера по имени сервиса
docker-compose run 
  • Вывод списка образов, связанных с compose
docker-compose images
  • Сборка и запуск всего стека
docker-compose up
  • Для запуска в фоне используйте опцию -d

  • Просмотр запущенных контейнеров

docker-compose ps
  • Остановка и удаление контейнеров, сетей и сетевых ресурсов, созданных compose
docker-compose down
  • Остановка контейнеров без удаления
docker-compose stop
  • Перезапуск конкретного сервиса
docker-compose restart 
  • Просмотр логов
docker-compose logs -f 

Практические рекомендации и лучшие практики

  1. Разделяйте конфигурации по окружениям

    • docker-compose.yaml для общих настроек
    • docker-compose.override.yaml для локальной разработки
    • docker-compose.prod.yaml для production
  2. Управление секретами

    • Не помещайте пароли и ключи в YAML. Используйте внешние секреты, .env файлы, или менеджеры секретов в CI.
  3. Мониторинг и логирование

    • Пробрасывайте логи в centralised logger или в файловую систему хоста через volumes.
  4. Сетевые практики

    • Определяйте user-defined сети для изоляции трафика между сервисами.
  5. Тестирование

    • Пишите интеграционные тесты, которые поднимают compose в CI, прогоняют тесты и уничтожают окружение.
  6. Кэширование сборки

    • Используйте слои в Dockerfile для ускорения сборки и сохраняйте промежуточные образы при необходимости.

Когда Docker Compose подходит, а когда нет

Подходит когда:

  • Нужна простая локальная среда разработки.
  • Сервисы размещаются на одном физическом или виртуальном хосте.
  • Требуется быстрое повторяемое окружение для CI.

Не подходит когда:

  • Требуется масштабирование по множеству хостов.
  • Нужны сложные политики сетевой безопасности и авто‑масштабирование.
  • Требуется сильная интеграция с облачными контроллерами развёртывания.

В таких случаях рассматривайте Kubernetes или управляемые сервисы вроде AWS ECS, GKE, EKS.

Альтернативные подходы

  • Docker Swarm — встроенная в Docker система оркестрации с простым API и меньшей кривой обучения, чем Kubernetes.
  • Kubernetes — промышленный стандарт для распределённой оркестрации, мощный, но сложный.
  • Nomad — лёгкий оркестратор от HashiCorp, хорошо подходит для мультиподов и смешанных рабочих нагрузок.

Мини методология: от кода к среде за 5 шагов

  1. Написать Dockerfile для каждого сервиса.
  2. Создать docker-compose.yaml с сервисами, томами и сетями.
  3. Протестировать локально: docker-compose up и проверка логов.
  4. Интегрировать в CI: поднимать compose, запускать тесты, удалять стек.
  5. Для production: вынести секреты, использовать образ в registry и CI/CD для развёртывания.

Шаблоны и чек-листы

Чек-лист разработчика перед пушем в репозиторий:

  • Dockerfile собирается без предупреждений
  • docker-compose up запускает стэк в режиме dev
  • Тома корректно монтируются и не перезаписывают важные данные
  • Не хранится никаких секретов в YAML
  • Логи читаемы и направлены в нужное место

Чек-лист оператора перед релизом в production:

  • Все образы проверены и подписаны
  • Секреты вынесены в manager/secret store
  • Политики рестартов и ограничений ресурсов заданы
  • Есть план отката и инструкции для ручной остановки

Пример playbook: поднять приложение и откатить

SOP чтобы быстро поднять приложение локально:

  1. Клонировать репозиторий и перейти в папку проекта.
  2. Проверить наличие .env и заполнить необходимые переменные.
  3. Выполнить docker-compose build.
  4. Выполнить docker-compose up -d.
  5. Проверить состояние docker-compose ps и логи.

Откат/отключение:

  1. docker-compose down –volumes –remove-orphans
  2. Проверить, что не осталось нежеланных контейнеров и томов.

Критерии приёмки

Система считается корректно развернутой, если:

  • Все сервисы находятся в статусе Up в docker-compose ps.
  • Основные endpoint’ы приложения возвращают ожидаемые ответы.
  • Логи не содержат критических ошибок в течение 5 минут после старта.
  • Резервные тома доступны и содержат ожидаемые данные.

Командные сниппеты и примеры

Примеры для повседневных операций:

  • Запустить и пересобрать образы при изменениях
docker-compose up --build -d
  • Просмотреть логи в реальном времени
docker-compose logs -f
  • Масштабировать экземпляры сервиса (для сервисов, поддерживающих масштабирование)
docker-compose up -d --scale web=3
  • Принудительно пересоздать контейнеры без кэша
docker-compose build --no-cache && docker-compose up -d --force-recreate

Ментальные модели и эвристики

  • Разделяй конфигурацию и секреты: конфигурация в YAML, секреты в store.
  • Один сервис — одна ответственность. Если сервис делает много вещей, подумайте о декомпозиции.
  • Локальное поведение должно максимально приближаться к тестовому окружению, но без хранения секретов прямо в репозитории.

Decision flowchart для выбора между Compose и Kubernetes

flowchart TD
  A[Нужно оркестрация контейнеров?] --> B{Один хост или много?}
  B -->|Один хост| C[Docker Compose]
  B -->|Несколько хостов или облако| D{Требуется автоуправление и масштабирование?}
  D -->|Да| E[Kubernetes]
  D -->|Нет, нужна простота| F[Docker Swarm или управляемый сервис]

Короткий глоссарий

  • Compose — инструмент для определения и запуска многоконтейнерных приложений.
  • Image — слепок файловой системы и метаданных, из которого создают контейнер.
  • Volume — постоянное хранилище данных для контейнера.
  • Network — логическая сеть, связывающая контейнеры между собой.

Безопасность и конфиденциальность

  • Не храните секреты в docker-compose.yaml в виде plain text.
  • Ограничивайте привилегии контейнеров и используйте non-root пользователя внутри контейнера.
  • При необходимости применяйте политики контроля доступа на уровне хоста и registry.

Совместимость и миграция

  • Большинство конфигураций версии 3.x совместимы между собой, но проверяйте доступность функций в вашей версии Docker Engine.
  • Для перехода на Kubernetes рассмотрите инструменты конвертации, но планируйте ручную проверку сетевых политик и секретов.

Когда Docker Compose может провалиться

  • При потребности динамически масштабировать базу данных на несколько узлов.
  • Когда требуется сложный балансировщик нагрузки между хостами.
  • Для распределённых транзакций и требовательных SLA лучше выбрать более зрелую систему оркестрации.

Заключение

Docker Compose остаётся мощным инструментом для разработки, тестирования и лёгких production-стеков. Он прост в изучении и позволяет быстро описывать многоконтейнерные приложения. При росте требований по надёжности, масштабированию и сетевой безопасности следует рассмотреть миграцию на более сложные решения.

Важно: начинайте с простого и эволюционируйте архитектуру по мере роста нагрузки и числа хостов.

Ключевые шаги для старта: подготовить Dockerfile, написать docker-compose.yaml, протестировать локально и интегрировать в CI.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

6 внешних батарей и зарядных для ноутбука
Аксессуары

6 внешних батарей и зарядных для ноутбука

Как умножать в Excel — полное руководство
Excel

Как умножать в Excel — полное руководство

Instagram Cutouts: создать стикер из фото
Социальные сети

Instagram Cutouts: создать стикер из фото

Изменить виртуальную память в Windows 11
Windows

Изменить виртуальную память в Windows 11

Создание базы данных в Microsoft Access — руководство
Базы данных

Создание базы данных в Microsoft Access — руководство

Как включить двухэтапную проверку в Telegram
Безопасность

Как включить двухэтапную проверку в Telegram