Полное руководство по Docker Compose: от основ до продвинутых сценариев с видео

Исчерпывающее руководство по Docker Compose: от создания базового YAML-файла и запуска многоконтейнерных приложений до продвинутых тем (переменные окружения, healthchecks, multiple compose files) с видео-примерами ключевых действий.
Docker Compose — это незаменимый инструмент для определения и запуска многоконтейнерных приложений Docker. В то время как Docker работает с отдельными контейнерами, Compose позволяет управлять целым стеком сервисов (база данных, бэкенд, фронтенд, кэш) с помощью простого YAML-файла. Это руководство проведет вас от базовых концепций до сложных production-ориентированных сценариев, сопровождая ключевые момены видео-иллюстрациями.

Основой Compose является файл `docker-compose.yml`. В его основе лежат три ключевых секции: `services` (определение контейнеров), `networks` (настройка сети) и `volumes` (управление томами для данных). Простейший пример описывает веб-приложение и базу данных.

Пример базового `docker-compose.yml`:
version: '3.8'
services:
 web:
 build: . # Собрать образ из Dockerfile в текущей директории
 ports:
 - "8000:5000" # Проброс порта хост:контейнер
 environment:
 - DATABASE_URL=postgres://user:pass@db:5432/mydb
 depends_on:
 - db # Указывает зависимость от сервиса db
 volumes:
 - ./app:/code # Монтирование кода для разработки

 db:
 image: postgres:15-alpine # Использование готового образа
 environment:
 POSTGRES_PASSWORD: secretpassword
 POSTGRES_DB: mydb
 volumes:
 - postgres_data:/var/lib/postgresql/data/ # Сохранение данных в том

volumes:
 postgres_data: # Объявление именованного тома

Для запуска этого стека используется команда `docker-compose up` (или `docker compose up` в новых версиях). Флаг `-d` запускает сервисы в фоновом режиме. `docker-compose down` останавливает и удаляет контейнеры, сети (но по умолчанию не тома). [Видео: Демонстрация создания простого файла compose, запуска и просмотра логов через `docker-compose logs`].

Одна из самых мощных функций Compose — это работа с сетями. По умолчанию Compose создает одну общую сеть (bridge) для всех сервисов файла, и они могут обращаться друг к другу по имени сервиса (как в примере выше: `db` — это хостнейм). Это избавляет от необходимости линковать контейнеры вручную. Вы можете определить кастомные сети для лучшей изоляции, например, отдельную сеть для бэкенда и БД, и фронтенда.

Переменные окружения — ключ к конфигурированию. Никогда не хардкодите пароли или ключи в YAML-файл. Используйте файл `.env` в той же директории или передавайте переменные через окружение хоста. Compose автоматически подхватит переменные из `.env`.

Пример `.env` файла:
DB_PASSWORD=supersecret
WEB_PORT=8080

Использование в `docker-compose.yml`:
db:
 image: postgres
 environment:
 POSTGRES_PASSWORD: ${DB_PASSWORD}
web:
 ports:
 - "${WEB_PORT}:5000"

Для разработки бесценны volumes с bind mount, которые монтируют локальный код в контейнер, позволяя видеть изменения без пересборки образа. Для production же следует использовать только собранные образы и именованные тома для сохранения состояния. [Видео: Показ "живой" перезагрузки фронтенд-приложения при изменении файла на хосте благодаря volume].

Продвинутые сценарии включают в себя использование нескольких Compose-файлов. Это лучшая практика для управления разными средами (development, testing, production). Вы можете иметь базовый `docker-compose.yml` и переопределяющий `docker-compose.override.yml` для разработки (добавляет volumes, отладочные порты). Для production можно создать отдельный `docker-compose.prod.yml`.

Запуск с переопределением: `docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d`.

В production-файле вы можете изменить политику рестарта (`restart: always`), убрать монтирование кода, добавить более строгие настройки, использовать специфичные production-образы.

Еще один продвинутый паттерн — это управление зависимостями и порядком запуска. Хотя `depends_on` гарантирует только порядок *запуска* контейнеров, но не их *готовность*. Для проверки готовности сервиса (например, когда БД приняла подключения) используйте healthchecks в определении сервиса и условие `condition: service_healthy` в зависимостях.

Пример healthcheck для БД:
db:
 image: postgres
 healthcheck:
 test: ["CMD-SHELL", "pg_isready -U postgres"]
 interval: 10s
 timeout: 5s
 retries: 5
web:
 depends_on:
 db:
 condition: service_healthy

Docker Compose также интегрируется с Docker Swarm (через `docker stack deploy`) для простого развертывания на кластере, хотя для сложных оркестраций предпочтительнее Kubernetes.

В заключение, Docker Compose — это мост между простотой локальной разработки и дисциплиной production-развертывания. Начиная с простого файла из двух сервисов, вы постепенно приходите к сложным, модульным конфигурациям, управляемым через переменные и несколько файлов. Это делает его идеальным инструментом для CI/CD пайплайнов, где один и тот же файл (или его производная) может использоваться для тестирования и последующего деплоя. [Видео: Обзор полного цикла: от разработки с override-файлом до сборки production-образов и деплоя с prod-файлом].
167 5

Комментарии (14)

avatar
pkavhr3e5r 27.03.2026
Не хватает больше практических примеров для production, особенно про healthchecks и restart policies.
avatar
jt0qq7e 27.03.2026
Статья полезная, но некоторые термины могли бы быть объяснены подробнее для полных чайников.
avatar
g7025j 27.03.2026
Хороший структурированный гайд. Помог систематизировать обрывочные знания, которые были до этого.
avatar
7s4k4wt98eo7 27.03.2026
Отличное руководство! Как раз искал структурированную информацию по продвинутым сценариям развертывания.
avatar
jqocgedy 27.03.2026
Наконец-то нашел материал, где всё собрано в одном месте от А до Я. Автору респект!
avatar
tewcji 27.03.2026
Именно то, что нужно! Теория плюс наглядная практика в видеоформате — идеальное сочетание.
avatar
tn2w5djmq 28.03.2026
Ждал именно такого полного руководства с видео. Визуализация работы сетей — это то, чего не хватало в других статьях.
avatar
mvzucoqr0 28.03.2026
Мне кажется, раздел про переменные окружения и .env файлы можно было бы раскрыть глубже.
avatar
rox9su 28.03.2026
После прочтения и просмотра видео смог с первого раза поднять свой стек из трех сервисов. Спасибо!
avatar
e1q5seh 28.03.2026
Хорошо, что начали с основ. Для новичков в Docker Compose это самый сложный этап.
Вы просмотрели все комментарии