Live-данные · обновлено 19 июля 2026 г.

Docker Compose: что это такое, compose.yml и запуск контейнеров

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

КВКузнецов Вячеслав·Технический редактор·DevOps/SRE-техлид · опыт 10+ лет
Вакансий
158
активных в Москве
Медиана зарплаты
224 тыс. ₽
n = 46 вакансий с указанной зарплатой
Индекс спроса
70/100
#100 из 332 навыков
Доля IT-рынка
2.3%
23 профессий

Коротко о навыке

Docker Compose — не отдельная профессия, а обязательный инструмент для любого, кто работает с контейнерами в команде. Он превращает разрозненные docker run в воспроизводимую инфраструктуру.

SkillStat анализирует реальные требования работодателей: Compose востребован не только среди DevOps, но и у backend-разработчиков, QA-инженеров и data-специалистов. Это типичный навык middle-уровня: в вакансиях для juniors он встречается редко, зато начиная с грейда middle упоминается практически в каждом втором объявлении, где есть Docker. Тренд устойчивый — экосистема контейнеризации продолжает расти, а Compose остаётся стандартом де-факто для локальной разработки и CI-окружений.

Что такое Docker Compose

Простота

Один YAML-файл заменяет десятки docker run. Вся команда получает одинаковое окружение.

Востребованность

Навык нужен backend-разработчикам, DevOps, QA-инженерам. Встречается в 2.3% вакансий с Docker.

Ограничение

Не подходит для production-кластеров — там нужен Kubernetes или хотя бы Docker Swarm.

Простыми словами

Представьте оркестр: скрипач, пианист, барабанщик. Каждый играет свою партию, но вместе они создают музыку только под управлением дирижёра. Docker Compose — такой дирижёр для контейнеров. Если у вас есть несколько сервисов (веб-приложение, база данных, кэш), Compose позволяет описать их все в одном YAML-файле и запустить одной командой docker compose up. Никаких ручных docker network create, docker run --link — всё настраивается автоматически.

Как это работает

Вы создаёте файл compose.yml. В нём перечисляете сервисы — каждый из них соответствует образу (образ либо берётся из реестра, либо собирается из Dockerfile). Для каждого сервиса можно указать порты, переменные окружения, тома, сети, зависимости от других сервисов. Когда вы выполняете docker compose up, Compose создаёт изолированную сеть для проекта, запускает контейнеры в указанном порядке (с учётом depends_on), монтирует тома, пробрасывает порты и выводит логи всех сервисов в объединённый поток.

Чего Docker Compose не делает

Это не замена Dockerfile. Dockerfile описывает, как собрать образ; Compose описывает, как запустить набор готовых образов. Это не production-оркестратор вроде Kubernetes — Compose не умеет автоматически масштабировать, перезапускать упавшие контейнеры на других нодах, балансировать нагрузку. Это не инструмент для управления кластером — он работает на одной машине (вашем ноутбуке или сервере).

Понятия / Карта

Из чего состоит Docker Compose

Понятие Что это Что нужно уметь
Docker Engine
Ядро Docker: клиент-серверное приложение для управления контейнерами
Запускать, останавливать, обновлять Docker Engine
Docker CLI
Командная строка для взаимодействия с Docker Daemon
Выполнять основные команды: run, build, ps, exec, logs, compose
Image (образ)
Неизменяемый снимок приложения со всеми зависимостями
Собирать, тегировать, публиковать в реестр
Container (контейнер)
Работающий экземпляр образа — изолированный процесс
Запускать, останавливать, проверять состояние по статусу, логам
Dockerfile
Текстовый файл с инструкциями по сборке образа
Писать многостадийную сборку, оптимизировать слои
Layer (слой)
Каждая инструкция Dockerfile создаёт слой — часть образа с изменениями
Организовать порядок команд для кеширования слоёв
Registry
Хранилище образов (Docker Hub, Nexus, Harbor)
Авторизоваться, пуллить и пушить образы, тегировать
Tag
Метка версии образа (например, postgres:16-alpine)
Использовать осмысленные теги, избегать :latest
Digest
Уникальный хеш образа для точной идентификации
Проверять digest и фиксировать его в CI/CD
Volume
Постоянное хранилище данных, управляемое Docker
Создавать, монтировать, бэкапить тома
Bind mount
Прямая привязка папки хоста к папке в контейнере
Использовать для hot-reload в разработке
Network
Виртуальная сеть для связи контейнеров
Создавать сети, подключать контейнеры, использовать DNS по имени
Docker Compose
Инструмент для multi-container приложений: один YAML-файл
Писать compose.yml, управлять profiles, объединять файлы
Механика / Работа

Как Docker Compose поднимает среду из одного compose-файла

Compose проще понимать не через YAML сам по себе, а через путь одной среды. Есть файл с описанием сервисов, сетей, томов и переменных. Команда запускает одну команду, и приложение, база и соседние компоненты поднимаются вместе в согласованной схеме.

Шаг 01

Файл описывает сервисы

В compose.yaml задают контейнеры, их образы, команды запуска и базовые зависимости между ними.

Шаг 02

Compose собирает сеть и тома

Сервисы получают общий контур: внутренние адреса, volumes и переменные окружения.

Шаг 03

Контейнеры стартуют как связанный набор

Приложение, база и очередь поднимаются не по памяти разработчика, а по одному описанному сценарию.

Шаг 04

Команда видит среду как воспроизводимый стек

Локальный запуск, тестовый стенд и диагностика ошибок становятся заметно предсказуемее.

Карьера / Роли

Кому нужен Docker Compose

Docker Compose переносится между ролями: DevOps-инженер, Python-разработчик, Бэкенд-разработчик. В одном треке этот навык может быть основным рабочим инструментом, а в другом - сильным прикладным усилителем основной специализации.

Роли с Docker Compose за период

DevOps-инженер держит 93% вакансий по навыку.

Ещё 7 ролей используют Docker Compose

Текущий срез показывает активные вакансии сейчас. Распределение по ролям рассчитано по расширенной исторической выборке, поэтому значения могут быть выше текущего количества активных вакансий.

Практика / Задачи

Частые задачи с Docker Compose

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

Задача 01

Запустить все сервисы

Запускает все сервисы из compose.yml в фоновом режиме.

docker compose up -d
Задача 02

Остановить и удалить контейнеры

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

docker compose down
Задача 03

Посмотреть логи сервиса

Просмотр логов конкретного сервиса в реальном времени.

docker compose logs -f api
Задача 04

Войти в контейнер

Запуск bash внутри работающего контейнера сервиса api для отладки.

docker compose exec api bash
Задача 05

Пересобрать образы

Пересборка образов без перезапуска контейнеров. Полезно при изменении Dockerfile.

docker compose build
Задача 06

Запустить с определённым профилем

Запускает только сервисы с profile: debug, игнорируя остальные.

docker compose --profile debug up -d
Практика / Ошибки

Ошибки новичков

Ошибка 01

Забывают про порядок зависимостей

Используют depends_on без healthcheck, и приложение падает, потому что БД ещё не готова. Решение: комбинация depends_on + healthcheck.

Ошибка 02

Не используют --build при изменении Dockerfile

Если код изменился, а образ не пересобран, docker compose up запустит старый контейнер. Команда docker compose up --build форсирует пересборку.

Ошибка 03

Именуют сервисы слишком обобщённо

db, redis, app — путаница, если в проекте несколько стеков. Давайте более специфичные имена: postgres_main, postgres_test.

Ошибка 04

Путают docker-compose и docker compose

Устаревшая версия с дефисом — Python-утилита. Новая (встроенная в Docker CLI) — docker compose. Используйте вторую.

Ошибка 05

Не изолируют секреты

Кладут пароли прямо в compose.yml и коммитят в Git. Используйте .gitignore для .env и подгружайте переменные через env_file.

Рынок / Контекст

Docker Compose в современных IT-проектах: контекст спроса

Docker Compose — компонент экосистемы контейнеризации, который закрывает ключевую потребность: воспроизводимый запуск multi-container приложений. Рынок IT активно переходит на контейнеры, и стандарт де-факто — Docker. Compose как прослойка между одиночным docker run и полноценным Kubernetes остаётся обязательным этапом. По данным SkillStat, Docker упоминается в 2.3% активных IT-вакансиях, и в большинстве из них подразумевается и знание Compose. Тренд устойчивый: рост DevOps-практик, микросервисной архитектуры и CI/CD гарантирует спрос на этот навык в ближайшие годы.

Сокращает ручную работу

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

Встроен в рабочий процесс

Спрос держится дольше, когда навык нужен не эпизодически, а как часть ежедневного цикла разработки, проверки или доставки.

Закреплён в зрелом стеке

Docker Compose чаще ищут там, где процесс уже стандартизирован и без этого инструмента команда теряет скорость и предсказуемость.

Сигнал рынка
Стабильный спрос

Docker Compose формирует устойчивый спрос внутри своего рабочего сегмента.

Рынок / Спрос

Спрос на Docker Compose на рынке

Docker Compose сохраняет устойчивый прикладной спрос на рынке: 158 активных вакансий, #100 по рынку, 2.3% IT-вакансий. Ниже показано число открытых вакансий на конец каждого месяца: это исторический ряд по состоянию на конец месяца, а не текущий срез рынка на сегодня.

Сила спроса
Стабильный спрос
158
активных вакансий сейчас

#100 по рынку • 2.3% IT-вакансий

Месяц к месяцу
209
июль 2026 — предварительный накопительный срез

-10 вакансий и -5% к предыдущему месяцу.

Доход / Уровни

Зарплаты в вакансиях, где требуется Docker Compose

Медиана Docker Compose-вакансий — 224 000 ₽/мес., доля junior — 10%. Стек Docker + Kubernetes + CI/CD — уровень middle/senior DevOps с заметным зарплатным буcтом.

Медиана рынка
Ограниченная точность
224 000
₽ / месяц

46 вакансий с зарплатой в расширенной зарплатной выборке

Коридор по грейдам
уровни с выборкой

Коридор появится, когда по грейдам наберётся достаточная выборка.

Основной уровень
Middle
по структуре рынка

Middle - основной уровень рынка (41%)

Связи / Навыки

Навыки в связке с Docker Compose

Docker Compose редко живёт изолированно: чаще всего рынок видит его рядом с Docker, PostgreSQL, Linux. Самая плотная связка сейчас - Docker: оба навыка встречаются вместе в 99% вакансий.

Главная связка: Docker • 99% вакансий. Показываем общерыночные связки Docker Compose: не junior-минимум из блока выше, а навыки, которые чаще всего встречаются рядом с ним в одной вакансии.

Рабочий стек вокруг Docker Compose

навыки, которые рынок чаще всего видит рядом в одной вакансии

Навык Зачем рядом Доля
Одна из самых плотных рыночных связок рядом с Docker Compose.
99%
Часто встречается рядом с Docker Compose в одном рабочем сценарии.
65%
Часто встречается рядом с Docker Compose в одном рабочем сценарии.
61%
Поддерживает соседние процессы и усиливает рабочий контур навыка.
59%
Git
Поддерживает соседние процессы и усиливает рабочий контур навыка.
51%
Поддерживает соседние процессы и усиливает рабочий контур навыка.
49%

Связки, которые усиливают доход

не базовый минимум, а более сильные комбинации стека

1
PostgreSQL
n = 33
+3% 230 000 ₽
Вход / Старт

Порог входа

Сейчас на рынке 13 активных junior-вакансий с Docker Compose. Это 10% всех вакансий по навыку, поэтому для старта важнее всего смотреть на реальный объём junior-окна и на стек, который рынок ждёт рядом.

Junior-вакансии сейчас
13
активных вакансий

10% всех вакансий по навыку • Senior / Junior 4x

Доля junior
10%
% всех вакансий по навыку

Вход возможен, но рынок ждёт уже собранный стартовый стек.

Что нужно на старте

Стартовый стек

19
навыков в медианной вакансии

Медианная вакансия с Docker Compose ожидает около 19 навыков в стеке. Это широкий стартовый набор: рынок обычно ищет не один изолированный инструмент, а рабочую комбинацию соседних навыков.

Чаще всего требуют вместе

навыки из junior-вакансий, где встречается Docker Compose

Навык Junior-вакансии
Карьера / Резюме

Docker Compose в резюме: что значит "знаю Docker Compose"

Владение Docker Compose — важный маркер для работодателя. На разных этапах карьеры от него ждут разного уровня понимания. Вот что означает навык и как его показать.

Уровень Что значит Что показать
Beginner
Понимаю, что Compose — это YAML-файл для запуска нескольких контейнеров
Умею запускать простой compose.yml, знаю docker compose up/down
Junior developer
Могу описать окружение приложения: БД, кэш, сам сервис
Написал compose.yml для своего pet-проекта с PostgreSQL и Redis
Middle developer
Уверенно использую Compose в CI/CD, работаю с profiles и несколькими файлами
Организовал тестовые стенды через compose.dev.yml и compose.ci.yml
QA automation
Поднимаю автотесты в Compose, интегрирую с Selenium Grid
Настроил CI-пайплайн с docker compose up/down для интеграционных тестов
Data/ML
Использую Compose для воспроизводимых экспериментов (Jupyter + БД + модель)
Описал окружение для ML-эксперимента с фиксированными версиями зависимостей
DevOps junior
Понимаю, как Compose вписывается в CI/CD, могу деплоить на один сервер
Настроил GitLab CI, который собирает и запускает Compose для тестов
SRE/platform
Знаю ограничения Compose, понимаю, когда переходить на Kubernetes
Спроектировал миграцию Compose → K8s для сервиса, который вырос из одного сервера
Сравнение / Инструменты

Docker Compose рядом с Docker, Linux и CI/CD

Compose почти всегда живёт не отдельно. Рядом стоят Docker как база контейнеризации, Linux как среда исполнения и CI/CD как место, где эту же схему хочется повторить без ручной магии.

Инструмент За что отвечает Когда нужен Граница

Docker Compose

Связывает несколько контейнеров в одну среду с сетями, томами и переменными.

Нужен, когда важно быстро поднять локальный или тестовый стек одинаково для всей команды.

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

Docker

Даёт сами контейнеры, образы и базовые команды работы с ними.

Нужен всегда, потому что Compose использует именно контейнерную основу Docker.

Сам по себе не описывает целую multi-service среду так удобно и коротко.

Linux

Частая среда, где реально живут контейнеры, файловые монты и сетевые настройки.

Важен, когда надо понимать права, файлы, процессы и поведение среды под контейнерами.

Не даёт готовой схемы сервисов, а только операционную основу.

CI/CD

Позволяет запускать ту же среду в пайплайне, а не только на ноутбуке разработчика.

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

Не описывает сами сервисы, а только запускает и встраивает их в процесс.

Навык / Применение

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

Docker Compose используется в разных ролях — от разработки до эксплуатации. Разберём сценарии по командам.

Сценарий 01

Разработка

Вы пишете микросервис, которому нужна БД, кэш и очередь. Вместо того чтобы устанавливать PostgreSQL и Redis локально, вы описываете их в compose.yml. Вся команда...

Сценарий 02

QA и тестирование

Для автоматизированных тестов нужен чистый стенд. Compose поднимает приложение, Selenium Grid, заглушки внешних сервисов. Команда docker compose up -d и `docker...

Сценарий 03

Инфраструктура

В CI/CD пайплайнах Compose — стандарт для прогона интеграционных тестов. Вы собираете образ, поднимаете связку через docker compose up, тестируете и удаляете.

Сценарий 04

Data / ML

Воспроизводимость экспериментов — ключевая проблема. Compose поднимает Jupyter Notebook, базу данных, ML-модель как REST API. Данные сохраняются в volumes,...

По направлениям

Docker Compose заметен в 4 направлениях рынка с долей выше 5%.

Направление Контекст Доля
Разработка
Локальный запуск БД, кэша и очередей одной командой.
47.3%
Инфраструктура
CI-тесты, сборка и деплой на одном сервере.
34.5%
Тестирование
Часть спроса по навыку сосредоточена в этом направлении.
8.2%
Данные и ML
Часть спроса по навыку сосредоточена в этом направлении.
7.5%
Направления показывают, в каких частях IT-рынка навык заметен чаще всего, без разбивки по ролям.
Инструмент / Возможности

Что нужно уметь в Docker Compose

Рабочий Docker Compose — это не знание одной команды up. Нужно понимать services, networks, volumes, environment variables, restart policy и границу между сборкой образа и запуском связанной среды.

Описывать multi-container среду

Собирать приложение, базу, очередь и вспомогательные сервисы в одном понятном compose-файле.

Держать конфигурацию под контролем

Понимать, где лежат переменные среды, какие порты публикуются и как сервисы видят друг друга.

Работать с volumes и данными

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

Диагностировать старт и зависимость сервисов

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

Сравнение / Контекст

Docker Compose, Dockerfile и одиночный запуск: в чём разница

Главная путаница вокруг Compose обычно не с Kubernetes, а с более базовыми вещами: Dockerfile и docker run. Dockerfile описывает образ. Compose описывает уже связанную среду из нескольких сервисов.

Dockerfile

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

docker run

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

Docker Compose

Держит целый набор сервисов, их сети, volumes и переменные как один воспроизводимый сценарий запуска.

Где проходит граница

Compose не заменяет сборку образа и не претендует на тяжёлую оркестрацию прод-уровня. Он решает задачу связанной среды.

Данные / Стек

Что обычно проверяют в Compose-среде

Когда Compose-среда ведёт себя странно, проблема редко живёт в одной строке YAML. Обычно смотрят на имена сервисов, сеть, проброс портов, volume-монты, переменные среды и порядок запуска зависимостей. Полезно разбирать одну цепочку целиком: compose-файл, образ, сеть, контейнер и реальный лог приложения. Если эта цепочка не читается, любая правка среды становится случайной.

Service и image

Какой контейнер должен стартовать, из какого образа и с какой командой.

Ports и network

Какие соединения нужны наружу, а какие должны жить только внутри общей сети.

Environment и secrets

Где приложение берёт доступы, адреса и параметры подключения к соседним сервисам.

Volumes и состояние данных

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

Практика / Workflow

Как Docker Compose используется в реальном проекте

Этап Что происходит Артефакт
1 Разработка
Код пишется локально в изолированной среде с БД и кэшем через Compose
compose.yml
2 Dockerfile
Описывается образ сервиса: base image, зависимости, копирование кода
Dockerfile
3 Compose
Поднимаются зависимости: БД, кэш, брокер — одной командой
compose.yml + .env
4 Тесты
Запускаются в воспроизводимой среде через docker compose up
Test pipeline + compose.ci.yml
5 CI
Собирает образ из Dockerfile и публикует в реестр
Image в реестре
6 Registry
Хранит образ с тегом и digest
Tag/digest
7 Deploy
Запускает образ на staging/prod через Compose (для небольших проектов)
Запущенный стек в production
8 Наблюдаемость
Проверяются логи через docker compose logs и healthcheck эндпоинты
Dashboard / логи
Инструмент / Оркестрация

Docker Compose: services, networks, volumes

Это сердце инструмента. Разберём структуру типового compose.yml на примере связки FastAPI + PostgreSQL + Redis.

services / компоненты стека

Три сервиса: db (PostgreSQL), redis (Redis), api (FastAPI). Каждый описан образом, портами, окружением и томами.

networks / связи

Compose автоматически создаёт сеть `имя_проекта_default`. Сервисы обращаются друг к другу по имени (например, `db:5432`).

volumes / хранилище

Именованные тома `pgdata` и `redis_data` для персистентности. Без них данные пропадут при пересоздании контейнера.

depends_on / healthcheck

Compose ожидает не просто запуска контейнера, а успешного healthcheck `pg_isready`. Это критично, чтобы приложение не пыталось подключиться к БД до её инициализации.

Пример: типовой стек инструмента

Для api указываем `build: ./api` — Compose сам соберёт образ из Dockerfile в этой директории.

Рекомендации по production

Используйте несколько compose-файлов: `compose.yml` (общее) и `compose.prod.yml` (секреты, лимиты).

Практика / Docker Compose

Docker Compose: лучшие практики и типичные ошибки новичков

Практика 01

Пин версий образов

Всегда указывайте конкретную версию образа (например, `postgres:16-alpine` вместо `:latest`). Это предотвращает неожиданные сбои CI/CD из-за обновлений.

Практика 02

.env для переменных

Вынесите секреты и настройки окружения в `.env` рядом с `compose.yml`. Compose автоматически подхватит переменные.

Практика 03

Явное объявление томов

Перечислите все тома в корневом разделе `volumes:`. Это повышает читаемость и предотвращает случайное создание анонимных томов.

Практика 04

Healthcheck для БД

Настраивайте `healthcheck` для баз данных. Это спасёт от ошибок подключения при старте приложения раньше, чем база.

Практика 05

Разделение compose-файлов

Не заносите production-секреты в один файл с dev-настройками. Используйте несколько файлов: `compose.yml`, `compose.dev.yml`, `compose.prod.yml`.

Практика 06

Ограничение ресурсов

Для предотвращения «пожирания» памяти укажите `deploy.resources.limits` — даже если не используете swarm.

Практика 07

.dockerignore в корне

Добавьте `.dockerignore`, чтобы при сборке не копировались папки `node_modules` или `venv`. Это ускорит сборку.

Практика 08

depends_on + healthcheck

Используйте `depends_on` с `condition: service_healthy`, чтобы приложение не запускалось до полной готовности зависимостей.

Практика / Безопасность

Безопасность Docker Compose: что нельзя делать

Риск 01

Не запускайте контейнеры от root

Убедитесь, что в Dockerfile указан `USER app`, а в образе нет лишних setuid-бинарников. Иначе взлом контейнера может дать доступ к хосту.

Риск 02

Не монтируйте Docker socket без нужды

Монтирование `/var/run/docker.sock` даёт контейнеру полный контроль над Docker daemon. Используйте только для доверенных образов.

Риск 03

Не храните секреты в образе

Переменные окружения из `environment` видны в `docker inspect`. Используйте `.env` файлы или Docker Secrets.

Риск 04

Не используйте network_mode: host без понимания

Это выключает изоляцию — сервис становится доступен на всех интерфейсах хоста. Для production — угроза.

Риск 05

Сканируйте образы на уязвимости

Интегрируйте Trivy или Docker Scout в CI. Если образ содержит CVE, Compose не защитит — нужен аудит на уровне registry.

Риск 06

Не используйте :latest в production

`:latest` — не фиксированный тег. Через неделю он может указывать на другой образ, что приведёт к неожиданным изменениям.

Риск 07

Ограничивайте capabilities контейнерам

Не давайте `--cap-add ALL` или `--privileged` без крайней необходимости. Используйте минимально возможный набор прав.

Риск 08

Обновляйте хост и Docker Engine

Регулярно обновляйте Docker Engine и хост-систему. Уязвимости в самом Docker могут скомпрометировать все контейнеры.

Будущее / Роль

Перспективы Docker Compose

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

Сигнал 01

Интеграция с DevContainer

Docker Compose становится стандартным описанием dev-окружения в VSCode и GitHub Codespaces через devcontainer.json.

Сигнал 02

Podman Compose как альтернатива

С ростом популярности Podman (особенно в RHEL) Podman Compose может заменить Compose в части Linux-окружений.

Сигнал 03

Упрощение production-сценариев

Развитие Docker Compose в сторону production-ready: ожидается улучшение управления секретами, логами и мониторингом.

Практика / Портфолио

Портфолио с Docker Compose: с чего начать

Проект 01

Локальное окружение для веб-приложения

Опишите в compose.yml стек: FastAPI + PostgreSQL + Redis + Nginx. Убедитесь, что все сервисы запускаются одной командой и доступны по localhost. Добавьте healthcheck для БД. Задание: приложение должно быть доступно по...

Проект 02

Тестовый стенд с Selenium Grid

Создайте compose.yml с сервисами: тестируемое приложение, Selenium Hub, браузерные ноды (Chrome, Firefox). Напишите простой тест, который проходит в этом окружении. Задание: тест должен запускаться и завершаться без...

Проект 03

CI-пайплайн с Compose

Настройте GitLab CI или GitHub Actions: сборка образа, запуск интеграционных тестов через docker compose up/down. Задание: пайплайн должен проходить на каждый push в main.

Проект 04

Развёртывание на VPS через Compose

Разверните на сервере (DigitalOcean/VDS) стек: Nginx (reverse proxy) + приложение + PostgreSQL. Настройте auto-restart, лимиты ресурсов и Let's Encrypt. Задание: приложение должно быть доступно по домену через HTTPS.

Обучение / Маршрут

Как изучить Docker Compose

Чтобы освоить Docker Compose, нужно двигаться от базового Docker к практике и production-сценариям. Вот пошаговый план.

Этап 01

Освойте базовый Docker

Уверенно работайте с контейнерами: docker run, build, ps, exec, logs. Понимайте разницу между образом и контейнером. Без этого Compose будет казаться...

Этап 02

Напишите простой compose.yml

Начните с двух сервисов: веб-приложение (FastAPI) + Redis. Запустите, посмотрите логи, остановите. Добавьте третий — PostgreSQL. Поэкспериментируйте с...

Этап 03

Работа с окружениями

Изучите .env-файлы, profiles, несколько compose-файлов. Создайте compose.dev.yml с дополнительными сервисами (pgAdmin, Adminer) и запускайте их только в...

Этап 04

Интеграция в CI/CD

Настройте GitLab CI или GitHub Actions, который запускает docker compose up для тестов. Добавьте шаг сборки образа, прогон тестов, удаление контейнеров.

Курсы · по данным рынка

Как выбирать обучение по Docker Compose

Соответствие — доля тем навыка, которые охватывает программа курса

Практика / Первый запуск

С чего начать Docker Compose на практике

Начать лучше с простого набора: приложение и база в одном compose-файле. Потом добавить переменные среды, volume для данных, отдельную сеть и один зависимый сервис вроде очереди или кеша. Так быстрее видно, чем Compose отличается от длинного docker run и почему он полезен команде, а не только одному разработчику. На таком примере проще поймать типовые ошибки со связями сервисов, портами и именами хостов. И заодно становится понятнее, где заканчивается просто запуск и начинается поддержка среды. Потом стек уже легче расширять без хаоса.

Шаг 01

Соберите приложение и базу

Поднимите два сервиса в одном compose-файле и проверьте, что они видят друг друга.

Шаг 02

Добавьте environment и volume

Разведите конфигурацию запуска и постоянные данные, чтобы среда не сбрасывалась после рестарта.

Шаг 03

Проверьте сеть и имена сервисов

Разберитесь, как контейнеры находят друг друга внутри общего стека.

Шаг 04

Разберите один неудачный старт

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

Частые вопросы

Вопросы и ответы

Что такое Docker Compose простыми словами?

Инструмент для описания и запуска multi-container приложений одним YAML-файлом и одной командой docker compose up. Это как инструкция для оркестра: кто (какой сервис), где (образ), с чем (зависимости, сети, тома) и в каком порядке должен запускаться. Без Compose пришлось бы вручную вводить десятки docker run, связывать их сетями и следить за порядком старта.

Чем Docker Compose отличается от Dockerfile?

Dockerfile — это инструкция по сборке одного образа: какие зависимости установить, какие файлы скопировать, какую команду выполнять при запуске. Docker Compose — это инструкция по запуску целой группы контейнеров (сервисов), которые вместе образуют приложение. Compose может использовать образы, собранные из Dockerfile или готовые из реестра. Они не взаимозаменяемы, а дополняют друг друга.

Что такое compose.yml?

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

Что такое сервис в Docker Compose?

Логическая единица в compose.yml — обычно один контейнер, но может быть и несколько его экземпляров при использовании директивы scale. Сервис описывает, какой образ запускать, с какими параметрами.

Какую версию Compose сейчас использовать?

Актуальная — Compose V2, встроенная в Docker CLI (команда docker compose — без дефиса). Устаревшая V1 (docker-compose, с дефисом) была отдельной Python-утилитой и больше не развивается. Используйте docker compose для новых проектов.

Что такое volumes в Docker Compose?

Volumes (тома) — это механизм постоянного хранения данных вне контейнера. Если контейнер пересоздать, данные в томе сохранятся. Тома можно объявлять в корневом разделе volumes: и монтировать в любой сервис. Бывают именованные (например, pgdata) и анонимные (создаются автоматически, если не указано имя).

С чего начать изучение Docker Compose?

Сначала изучите базовый Docker: docker run, build, ps, exec, logs. Поймите разницу между образом и контейнером, научитесь монтировать тома и пробрасывать порты. Затем напишите простой compose.yml из двух сервисов: приложение + база данных. Постепенно добавляйте healthcheck, профили, несколько compose-файлов. Практика — ключ.

Сколько времени нужно, чтобы освоить Docker Compose?

Базового уровня можно достичь за 2–3 дня активной практики: написать compose.yml, запустить два-три сервиса, разобраться с volumes и networks. Уверенное использование с CI/CD, профилями и несколькими окружениями — 1–2 недели. Ключевой фактор — практический проект: например, поднять локальное окружение для своего веб-приложения.

Нужно ли знать YAML перед изучением Compose?

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

Какие проекты сделать в портфолио с Docker Compose?

1) Локальное окружение для своего проекта (бэкенд + БД + кэш + очереди). 2) Автоматизированный тестовый стенд (приложение + Selenium Grid + заглушка внешнего API). 3) Деплой мини-сервиса на VPS через Compose с Nginx и Let's Encrypt.

Кому нужен Docker Compose?

Backend-разработчикам — для описания окружения с БД, кэшем и очередями. DevOps — для CI/CD тестов. QA-инженерам — для развёртывания тестовых стендов. Data-специалистам — для воспроизводимых экспериментов с Jupyter, БД и ML-моделями.

Docker Compose — это отдельная профессия?

Нет. Это навык внутри других ролей. Отдельных вакансий «Docker Compose developer» не существует. Compose — часть экосистемы Docker, и работодатели ожидают его как базовый инструмент, а не как специализацию.

Влияет ли знание Docker Compose на зарплату?

Косвенно. Без него сложно устроиться на позицию middle+ DevOps или backend, потому что Compose — стандарт описания окружения. Но зарплату определяет роль, грейд и соседний стек (Kubernetes, CI/CD, облачные технологии), а не сам Compose.

Нужен ли Docker Compose frontend-разработчику?

Если фронтенд общается с бэкендом, который локально поднимается через Compose — да, он полезен для понимания, как настроить API для разработки. Но это не обязательное требование для вакансий фронтендера.

А QA-инженеру?

Да, особенно middle+ QA-автоматизаторам. Compose позволяет разворачивать тестовые стенды одной командой: приложение, Selenium, заглушки. Это стандарт для интеграционного тестирования.

А data scientist?

Да, если нужно воспроизводимое окружение для экспериментов: Jupyter Notebook + БД + ML-модель как REST API. Compose удобнее, чем ручное управление контейнерами.

Как запустить первый контейнер с Compose?

Создайте файл compose.yml: services: web: image: nginx:alpine ports: - "8080:80". Выполните docker compose up -d. Откройте http://localhost:8080. Вы увидите стартовую страницу Nginx.

Как передать переменные окружения из .env?

Создайте файл .env в той же папке, что и compose.yml. Compose автоматически подставит переменные в любой сервис. В .env: DB_PASSWORD=secret. В сервисе: environment: DB_PASSWORD: ${DB_PASSWORD}. Альтернативно — укажите env_file: .env.

Как уменьшить размер compose.yml?

Не дублируйте общие настройки. Используйте YAML-якоря & для повторяющихся блоков. Разделите конфигурацию на несколько файлов: compose.yml (основное), compose.dev.yml (dev-специфичное).

Как остановить только один сервис?

docker compose stop <имя_сервиса> — остановит контейнер, не удаляя его. docker compose down <имя_сервиса> — остановит и удалит контейнер конкретного сервиса.

Как перезапустить сервис с новым кодом?

Если код изменился только внутри контейнера (через bind mount), достаточно docker compose restart <имя_сервиса>. Если изменился Dockerfile или код копируется при сборке — используйте docker compose up --build -d.

Как смотреть логи только одного сервиса?

docker compose logs -f api — покажет логи в реальном времени (-f = follow). Можно указать имя любого сервиса.

Как удалить все тома после остановки?

docker compose down -v. Флаг -v удаляет все именованные и анонимные тома, объявленные в compose.yml. Внимание: данные будут безвозвратно потеряны.

Docker Compose или Kubernetes — что учить первым?

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

Docker Compose или Podman Compose?

Podman Compose — аналог для систем без Docker daemon (RHEL, Fedora). Файлы совместимы, команды почти идентичны. Если вы на Linux и хотите rootless (без прав root) — выбирайте Podman. В остальных случаях — Docker Compose.

Docker Compose или docker run для нескольких контейнеров?

Если контейнеров больше двух и вы запускаете их регулярно — однозначно Compose. docker run — для разовых экспериментов с одним контейнером. Compose экономит время, снижает риск ошибок и обеспечивает воспроизводимость.

Docker Compose v2 vs v3?

Это разные вещи. «V2» и «V3» могут относиться к версии CLI (docker-compose V1 vs V2 — утилита) или к версии формата файла (2.x, 3.x). Поле version в compose-файле устарело и игнорируется с 2020 года (Compose Specification) — не указывайте его вовсе, начинайте файл с services:. Актуальный формат файла — 3.8 (или 3.9). Используйте docker compose (CLI v2) и формат 3.8.