Инженерам • 24 апреля 2025 • 15 мин чтения

Docker Compose — что это?

Когда проект выходит за пределы одного контейнера, начинается хаос: база данных, сервер, фронтенд, очередь сообщений — всё нужно запускать вручную, настраивать соединения, отслеживать порты. Это не просто неудобно — это потеря времени и нервов. Чтобы навести порядок, придумали Docker Compose.

Это инструмент, который позволяет запускать сразу несколько Docker-контейнеров, настроенных для работы друг с другом, через один конфигурационный файл. Он читается как рецепт: что, где и как поднять. А одна команда запускает всё — быстро и слаженно.

Вы описываете инфраструктуру проекта в YAML-файле — docker-compose.yml. В нём можно указать:

  • список сервисов (приложения, базы данных и т.д.),
  • зависимости между ними,
  • сетевые настройки,
  • переменные окружения,
  • тома и порты.

Пример простого файла:

version: '3.9'
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- redis
redis:
image: redis

А вот и команда для запуска:

docker-compose up

Всё. Несколько контейнеров запускаются одновременно, автоматически соединяются в одну сеть и работают как единое приложение.

Объяснить простыми словами, что такое Docker Compose можно так: это дирижёр, управляющий оркестром из контейнеров. Один взмах — и всё звучит. Он запускает, связывает, синхронизирует — сам, без вашей ручной помощи.

Такой подход помогает:

  • стандартизировать окружение для всей команды,
  • сэкономить время на настройке,
  • исключить «работает у меня, не работает у тебя»,
  • превратить инфраструктуру в часть кода.

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

Для чего нужен Docker Compose

Docker как идея — это про контейнеры. Но когда их становится больше одного, всё усложняется: отдельный контейнер под базу, ещё один — под сервер, третий — для фронта. Теперь представьте, что их пять, десять или больше. Управлять ими вручную? Это как жонглировать бензопилами. Вот тут и нужен Docker Compose.
Он решает сразу несколько задач.

1. Автоматизация запуска окружения

Без Compose вы бы писали 5–10 команд, чтобы поднять всё вручную. С ним — одна строка, и весь проект готов к работе. Неважно, работаете вы в команде или в одиночку, на Linux или Windows — всё развернётся одинаково.

docker-compose up

Вы запускаете и сервер, и базу, и вспомогательные сервисы — одновременно.

2. Конфигурация как код

Файл docker-compose.yml — это описание всей инфраструктуры. Его можно хранить в Git, коммитить вместе с кодом, делиться с коллегами. Так у вас не только приложение под контролем, но и вся его среда.

Изменили порт, добавили кэш — поменяли строку в YAML, и всё готово. Это делает настройку прозрачной и воспроизводимой.

3. Упрощение работы в команде

Новому разработчику больше не нужно вручную поднимать MongoDB, Redis и Nginx. Он просто делает git clone, а потом:

docker-compose up

и уже работает в точной копии боевого окружения. Без долгих инструкций и лишних настроек.

4. Быстрые тесты и CI

В автоматических тестах важно, чтобы всё разворачивалось быстро и одинаково. Compose идеально подходит для CI/CD: он разворачивает инфраструктуру в изолированной среде, выполняет тесты и выключает всё после работы.

docker-compose down

Всё чисто, без «грязи» в системе.

5. Масштабирование

Вы можете задать нужное количество копий для сервиса, например:

docker-compose up --scale web=3

И получите сразу три веб-сервиса. Это удобно, если нужно проверить балансировку нагрузки или протестировать отказоустойчивость.

6. Локальная разработка и прод

Один и тот же docker-compose.yml может использоваться и на локалке, и на сервере. При необходимости вы можете подключить .env-файл с переменными для разных окружений — и не переписывать конфигурацию под каждую машину.

Если коротко, Docker Compose нужен:

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

👉 Освойте практические навыки на курсе «Docker для админов и разработчиков»! Начните с основ и всего за три недели станьте уверенным пользователем Docker.

Как создать Docker Compose файл

Создание docker-compose.yml — первый шаг к автоматизации. Это несложно, особенно если вы уже работали с Dockerfile. Главное — понять структуру и ключевые поля. Ниже разберём, как сделать Docker Compose файл для реального проекта: шаг за шагом, с примерами и пояснениями.

Шаг 1. Создайте файл docker-compose.yml

Файл можно положить в корень проекта. Расширение обязательно — .yml или .yaml.

touch docker-compose.yml

Откройте его в редакторе и добавьте первую строку — версию:

version: '3.9'

Это версия синтаксиса Compose. Рекомендуется использовать последнюю стабильную.

Шаг 2. Описание сервисов

Дальше идёт ключ services: — здесь вы описываете все контейнеры, которые должны запускаться вместе.

Например, сервис web — это наш backend:

services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db

Что здесь происходит:

  • build: . — собираем образ из текущей директории (где есть Dockerfile),
  • ports: — пробрасываем порт наружу,
  • depends_on: — указываем, что перед запуском web-сервиса должен подняться контейнер с базой данных.

Теперь добавим сервис db:

db:
image: postgres:15
restart: always
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: secret

Compose сам скачает образ Postgres, создаст контейнер и передаст в него переменные окружения.

Шаг 3. Указание томов и переменных

Если вы хотите сохранять данные из базы даже после перезапуска контейнера, добавьте том:

volumes:
- pgdata:/var/lib/postgresql/data

Ниже, вне секции services:, нужно описать сам том:

volumes:
pgdata:

Теперь данные не исчезнут после docker-compose down.
Переменные можно вынести в .env:

POSTGRES_USER=user
POSTGRES_PASSWORD=secret

А в YAML вместо них писать:

environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

Такой подход упростит настройку для разных окружений.

Шаг 4. Сетевые настройки

По умолчанию Compose создаёт общую виртуальную сеть, в которой все сервисы видят друг друга по имени. То есть web может обратиться к db, просто указав db как хост.

Дополнительную настройку сети чаще всего используют в продакшене. Пример:

networks:
backend:

А у сервисов:

web:
networks:
- backend
db:
networks:
- backend

Шаг 5. Полезные параметры

Добавим несколько часто применяемых настроек:

  • restart: — задаёт политику перезапуска контейнера. Например, always, unless-stopped, on-failure.
  • command: — позволяет переопределить команду запуска.
  • volumes: — монтирует локальные каталоги внутрь контейнера.
  • environment: — задаёт переменные окружения.

Пример для сервиса с Node.js:

services:
frontend:
image: node:18
volumes:
- .:/app
working_dir: /app
command: npm start
ports:
- "3000:3000"

Теперь фронтенд будет запускаться из вашего проекта локально, как будто он «живёт» в контейнере.
Получите бесплатно материалы «Как запустить контейнер Docker из GitLab»
Дарим гайд по Docker Compose

Пример docker compose файла для новичков

Чтобы стало совсем понятно, вот минимальный рабочий пример для API на Python + PostgreSQL:

version: '3.9'
services:
api:
build: .
ports:
- "5000:5000"
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_USER: dev
POSTGRES_PASSWORD: devpass
POSTGRES_DB: devdb
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:

Сохранили — и всё готово. Запуск — одной командой, а инфраструктура полностью под контролем.

Что нужно запомнить:

  • Файл docker-compose.yml — это декларация среды.
  • YAML должен быть аккуратно отформатирован — ошибки в отступах ломают всё.
  • Один compose-файл может описывать локальную разработку, staging и продакшн (если грамотно использовать .env и параметры).

Как запустить Docker Compose

Вы уже написали docker-compose.yml и готовы к старту? Отлично. Теперь разберём, как запустить Docker Compose и не наломать дров при первом старте.
На практике всё сводится к нескольким простым командам, но каждая из них важна.

Запуск контейнеров

Чтобы запустить все сервисы, описанные в compose-файле, используйте:

docker-compose up

Эта команда:

  • создаёт контейнеры,
  • поднимает их в нужном порядке,
  • отображает логи прямо в терминале.

Если хотите, чтобы терминал не зависал на логах, добавьте флаг -d:

docker-compose up -d

Теперь всё работает в фоне. Удобно для локальной разработки.

Остановка и удаление

Чтобы остановить и убрать все контейнеры, достаточно одной команды:

docker-compose down

Она завершит работу и удалит все поднятые контейнеры, но не удалит тома с данными.
Если нужно полностью «почистить» окружение (включая тома):

docker-compose down -v

Будьте осторожны — удалятся все данные, например содержимое базы.

Перезапуск

Если вы изменили docker-compose.yml, лучше перезапустить всё:

docker-compose down && docker-compose up -d

Это гарантирует, что все изменения применятся и не останется старых артефактов.

Проверка логов

Чтобы посмотреть, что происходит внутри контейнеров:

docker-compose logs

Для вывода логов конкретного сервиса:

docker-compose logs db

А если хотите «в реальном времени» — добавьте -f:

docker-compose logs -f web

Начните бесплатно изучать Docker!
Дарим демодоступ к обучению на 1 день, чтобы вы познакомились с материалами и спикерами курса.

Подключение к контейнеру

Нужно попасть внутрь контейнера? Без проблем:

docker-compose exec web sh

Или, если используется bash:

docker-compose exec web bash

Это полезно для отладки, тестирования или установки зависимостей вручную.

Что делает Docker Compose? Он читает docker-compose.yml, создаёт сеть, запускает контейнеры, связывает их по именам и отслеживает зависимости. Всё это — одной командой.

Запомнить:

  • up — запуск,
  • down — остановка,
  • logs, exec, restart — управление во время работы.

С этими базовыми командами вы уже можете работать как профессионал.

Заключение

Docker Compose — это не просто удобный инструмент, а настоящая находка для разработчиков и админов. Он решает рутинные задачи, экономит время, упрощает совместную работу и делает инфраструктуру управляемой. Вам не нужно больше держать в голове, какие контейнеры запускать первыми, какие переменные прописывать и где искать IP-адреса. Всё уже описано — один файл, одна команда.
Вы узнали:

  • Docker Compose что это — инструмент оркестрации контейнеров;
  • для чего нужен — от локальной разработки до CI/CD;
  • как создать docker compose файл — с нуля и по шагам;
  • как запустить Docker Compose — быстро и без ошибок.

Теперь вы готовы использовать Compose в своих проектах — без страха и долгих инструкций. А если хочется пойти дальше и освоить Docker на более глубоком уровне, вот куда двигаться:

Получите практические знания на курсе «Docker для админов и разработчиков»!
За три недели вы пройдёте путь от новичка до уверенного пользователя: настройка образов, продвинутые команды, оптимизация и безопасность.
👉 Подробнее о курсе

Статью подготовили

Редакция Слёрма
Понравилась статья? Будем рады вашему лайку и репосту — вдруг кому-то тоже пригодится:)
Оцените статью

Читайте также: