Простота
Один YAML-файл заменяет десятки docker run. Вся команда получает одинаковое окружение.
Вы запускаете проект, но для работы нужны PostgreSQL, Redis, бэкенд и фронтенд. Раньше вы открывали четыре терминала, вручную запускали контейнеры, настраивали сеть. Docker Compose решает эту проблему: один файл, одна команда — и всё приложение поднимается автоматически. Сегодня этот навык встречается в 158 вакансиях в московском IT-срезе.
Docker Compose — не отдельная профессия, а обязательный инструмент для любого, кто работает с контейнерами в команде. Он превращает разрозненные docker run в воспроизводимую инфраструктуру.
SkillStat анализирует реальные требования работодателей: Compose востребован не только среди DevOps, но и у backend-разработчиков, QA-инженеров и data-специалистов. Это типичный навык middle-уровня: в вакансиях для juniors он встречается редко, зато начиная с грейда middle упоминается практически в каждом втором объявлении, где есть Docker. Тренд устойчивый — экосистема контейнеризации продолжает расти, а Compose остаётся стандартом де-факто для локальной разработки и CI-окружений.
Один 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), монтирует тома, пробрасывает порты и выводит логи всех сервисов в объединённый поток.
Это не замена Dockerfile. Dockerfile описывает, как собрать образ; Compose описывает, как запустить набор готовых образов. Это не production-оркестратор вроде Kubernetes — Compose не умеет автоматически масштабировать, перезапускать упавшие контейнеры на других нодах, балансировать нагрузку. Это не инструмент для управления кластером — он работает на одной машине (вашем ноутбуке или сервере).
Compose проще понимать не через YAML сам по себе, а через путь одной среды. Есть файл с описанием сервисов, сетей, томов и переменных. Команда запускает одну команду, и приложение, база и соседние компоненты поднимаются вместе в согласованной схеме.
Файл описывает сервисы
В compose.yaml задают контейнеры, их образы, команды запуска и базовые зависимости между ними.
Compose собирает сеть и тома
Сервисы получают общий контур: внутренние адреса, volumes и переменные окружения.
Контейнеры стартуют как связанный набор
Приложение, база и очередь поднимаются не по памяти разработчика, а по одному описанному сценарию.
Команда видит среду как воспроизводимый стек
Локальный запуск, тестовый стенд и диагностика ошибок становятся заметно предсказуемее.
Docker Compose переносится между ролями: DevOps-инженер, Python-разработчик, Бэкенд-разработчик. В одном треке этот навык может быть основным рабочим инструментом, а в другом - сильным прикладным усилителем основной специализации.
DevOps-инженер держит 93% вакансий по навыку.
Ещё 7 ролей используют Docker Compose
Текущий срез показывает активные вакансии сейчас. Распределение по ролям рассчитано по расширенной исторической выборке, поэтому значения могут быть выше текущего количества активных вакансий.
Docker Compose ценен не абстрактным знанием инструмента, а повторяющимися рабочими задачами — ниже они разобраны так, как встречаются в реальной работе.
Запустить все сервисы
Запускает все сервисы из compose.yml в фоновом режиме.
docker compose up -d Остановить и удалить контейнеры
Останавливает и удаляет все контейнеры, сети. Тома по умолчанию не удаляются.
docker compose down Посмотреть логи сервиса
Просмотр логов конкретного сервиса в реальном времени.
docker compose logs -f api Войти в контейнер
Пересобрать образы
Пересборка образов без перезапуска контейнеров. Полезно при изменении Dockerfile.
docker compose build Запустить с определённым профилем
Запускает только сервисы с profile: debug, игнорируя остальные.
docker compose --profile debug up -d Используют depends_on без healthcheck, и приложение падает, потому что БД ещё не готова. Решение: комбинация depends_on + healthcheck.
Если код изменился, а образ не пересобран, docker compose up запустит старый контейнер. Команда docker compose up --build форсирует пересборку.
db, redis, app — путаница, если в проекте несколько стеков. Давайте более специфичные имена: postgres_main, postgres_test.
Устаревшая версия с дефисом — Python-утилита. Новая (встроенная в Docker CLI) — docker compose. Используйте вторую.
Кладут пароли прямо в compose.yml и коммитят в Git. Используйте .gitignore для .env и подгружайте переменные через env_file.
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 сохраняет устойчивый прикладной спрос на рынке: 158 активных вакансий, #100 по рынку, 2.3% IT-вакансий. Ниже показано число открытых вакансий на конец каждого месяца: это исторический ряд по состоянию на конец месяца, а не текущий срез рынка на сегодня.
#100 по рынку • 2.3% IT-вакансий
-10 вакансий и -5% к предыдущему месяцу.
Медиана Docker Compose-вакансий — 224 000 ₽/мес., доля junior — 10%. Стек Docker + Kubernetes + CI/CD — уровень middle/senior DevOps с заметным зарплатным буcтом.
46 вакансий с зарплатой в расширенной зарплатной выборке
Коридор появится, когда по грейдам наберётся достаточная выборка.
Middle - основной уровень рынка (41%)
Docker Compose редко живёт изолированно: чаще всего рынок видит его рядом с Docker, PostgreSQL, Linux. Самая плотная связка сейчас - Docker: оба навыка встречаются вместе в 99% вакансий.
Главная связка: Docker • 99% вакансий. Показываем общерыночные связки Docker Compose: не junior-минимум из блока выше, а навыки, которые чаще всего встречаются рядом с ним в одной вакансии.
навыки, которые рынок чаще всего видит рядом в одной вакансии
не базовый минимум, а более сильные комбинации стека
Сейчас на рынке 13 активных junior-вакансий с Docker Compose. Это 10% всех вакансий по навыку, поэтому для старта важнее всего смотреть на реальный объём junior-окна и на стек, который рынок ждёт рядом.
10% всех вакансий по навыку • Senior / Junior 4x
Вход возможен, но рынок ждёт уже собранный стартовый стек.
Медианная вакансия с Docker Compose ожидает около 19 навыков в стеке. Это широкий стартовый набор: рынок обычно ищет не один изолированный инструмент, а рабочую комбинацию соседних навыков.
Владение Docker Compose — важный маркер для работодателя. На разных этапах карьеры от него ждут разного уровня понимания. Вот что означает навык и как его показать.
Compose почти всегда живёт не отдельно. Рядом стоят Docker как база контейнеризации, Linux как среда исполнения и CI/CD как место, где эту же схему хочется повторить без ручной магии.
Связывает несколько контейнеров в одну среду с сетями, томами и переменными.
Нужен, когда важно быстро поднять локальный или тестовый стек одинаково для всей команды.
Не заменяет сборку образов и не подходит как тяжёлый прод-оркестратор.
Даёт сами контейнеры, образы и базовые команды работы с ними.
Нужен всегда, потому что Compose использует именно контейнерную основу Docker.
Сам по себе не описывает целую multi-service среду так удобно и коротко.
Частая среда, где реально живут контейнеры, файловые монты и сетевые настройки.
Важен, когда надо понимать права, файлы, процессы и поведение среды под контейнерами.
Не даёт готовой схемы сервисов, а только операционную основу.
Позволяет запускать ту же среду в пайплайне, а не только на ноутбуке разработчика.
Нужен, когда командный стек должен воспроизводиться перед релизом и на тестовых проверках.
Не описывает сами сервисы, а только запускает и встраивает их в процесс.
Docker Compose используется в разных ролях — от разработки до эксплуатации. Разберём сценарии по командам.
Вы пишете микросервис, которому нужна БД, кэш и очередь. Вместо того чтобы устанавливать PostgreSQL и Redis локально, вы описываете их в compose.yml. Вся команда...
В CI/CD пайплайнах Compose — стандарт для прогона интеграционных тестов. Вы собираете образ, поднимаете связку через docker compose up, тестируете и удаляете.
Docker Compose заметен в 4 направлениях рынка с долей выше 5%.
Рабочий Docker Compose — это не знание одной команды up. Нужно понимать services, networks, volumes, environment variables, restart policy и границу между сборкой образа и запуском связанной среды.
Собирать приложение, базу, очередь и вспомогательные сервисы в одном понятном compose-файле.
Понимать, где лежат переменные среды, какие порты публикуются и как сервисы видят друг друга.
Разводить временные контейнеры и постоянные данные так, чтобы среда не ломалась после каждого перезапуска.
Разбирать, почему приложение не дождалось базы, сеть собрана не так или контейнер циклически перезапускается.
Главная путаница вокруг Compose обычно не с Kubernetes, а с более базовыми вещами: Dockerfile и docker run. Dockerfile описывает образ. Compose описывает уже связанную среду из нескольких сервисов.
Нужен, чтобы собрать образ приложения: зависимости, команды, файлы и базовый слой контейнера.
Хватает для одиночного контейнера, но быстро становится тяжёлым, когда рядом появляются база, очередь и длинный список параметров.
Держит целый набор сервисов, их сети, volumes и переменные как один воспроизводимый сценарий запуска.
Compose не заменяет сборку образа и не претендует на тяжёлую оркестрацию прод-уровня. Он решает задачу связанной среды.
Когда Compose-среда ведёт себя странно, проблема редко живёт в одной строке YAML. Обычно смотрят на имена сервисов, сеть, проброс портов, volume-монты, переменные среды и порядок запуска зависимостей. Полезно разбирать одну цепочку целиком: compose-файл, образ, сеть, контейнер и реальный лог приложения. Если эта цепочка не читается, любая правка среды становится случайной.
Какой контейнер должен стартовать, из какого образа и с какой командой.
Какие соединения нужны наружу, а какие должны жить только внутри общей сети.
Где приложение берёт доступы, адреса и параметры подключения к соседним сервисам.
Что должно пережить перезапуск, а что можно потерять вместе с контейнером.
Это сердце инструмента. Разберём структуру типового compose.yml на примере связки FastAPI + PostgreSQL + Redis.
Три сервиса: db (PostgreSQL), redis (Redis), api (FastAPI). Каждый описан образом, портами, окружением и томами.
Compose автоматически создаёт сеть `имя_проекта_default`. Сервисы обращаются друг к другу по имени (например, `db:5432`).
Именованные тома `pgdata` и `redis_data` для персистентности. Без них данные пропадут при пересоздании контейнера.
Compose ожидает не просто запуска контейнера, а успешного healthcheck `pg_isready`. Это критично, чтобы приложение не пыталось подключиться к БД до её инициализации.
Для api указываем `build: ./api` — Compose сам соберёт образ из Dockerfile в этой директории.
Используйте несколько compose-файлов: `compose.yml` (общее) и `compose.prod.yml` (секреты, лимиты).
Всегда указывайте конкретную версию образа (например, `postgres:16-alpine` вместо `:latest`). Это предотвращает неожиданные сбои CI/CD из-за обновлений.
Вынесите секреты и настройки окружения в `.env` рядом с `compose.yml`. Compose автоматически подхватит переменные.
Перечислите все тома в корневом разделе `volumes:`. Это повышает читаемость и предотвращает случайное создание анонимных томов.
Настраивайте `healthcheck` для баз данных. Это спасёт от ошибок подключения при старте приложения раньше, чем база.
Не заносите production-секреты в один файл с dev-настройками. Используйте несколько файлов: `compose.yml`, `compose.dev.yml`, `compose.prod.yml`.
Для предотвращения «пожирания» памяти укажите `deploy.resources.limits` — даже если не используете swarm.
Добавьте `.dockerignore`, чтобы при сборке не копировались папки `node_modules` или `venv`. Это ускорит сборку.
Используйте `depends_on` с `condition: service_healthy`, чтобы приложение не запускалось до полной готовности зависимостей.
Убедитесь, что в Dockerfile указан `USER app`, а в образе нет лишних setuid-бинарников. Иначе взлом контейнера может дать доступ к хосту.
Монтирование `/var/run/docker.sock` даёт контейнеру полный контроль над Docker daemon. Используйте только для доверенных образов.
Переменные окружения из `environment` видны в `docker inspect`. Используйте `.env` файлы или Docker Secrets.
Это выключает изоляцию — сервис становится доступен на всех интерфейсах хоста. Для production — угроза.
Интегрируйте Trivy или Docker Scout в CI. Если образ содержит CVE, Compose не защитит — нужен аудит на уровне registry.
`:latest` — не фиксированный тег. Через неделю он может указывать на другой образ, что приведёт к неожиданным изменениям.
Не давайте `--cap-add ALL` или `--privileged` без крайней необходимости. Используйте минимально возможный набор прав.
Регулярно обновляйте Docker Engine и хост-систему. Уязвимости в самом Docker могут скомпрометировать все контейнеры.
Перспективы Docker Compose завязаны не только на текущем спросе, но и на том, как навык встраивается в новые платформы, инструменты и рабочие контуры.
Docker Compose становится стандартным описанием dev-окружения в VSCode и GitHub Codespaces через devcontainer.json.
С ростом популярности Podman (особенно в RHEL) Podman Compose может заменить Compose в части Linux-окружений.
Развитие Docker Compose в сторону production-ready: ожидается улучшение управления секретами, логами и мониторингом.
Опишите в compose.yml стек: FastAPI + PostgreSQL + Redis + Nginx. Убедитесь, что все сервисы запускаются одной командой и доступны по localhost. Добавьте healthcheck для БД. Задание: приложение должно быть доступно по...
Создайте compose.yml с сервисами: тестируемое приложение, Selenium Hub, браузерные ноды (Chrome, Firefox). Напишите простой тест, который проходит в этом окружении. Задание: тест должен запускаться и завершаться без...
Настройте GitLab CI или GitHub Actions: сборка образа, запуск интеграционных тестов через docker compose up/down. Задание: пайплайн должен проходить на каждый push в main.
Разверните на сервере (DigitalOcean/VDS) стек: Nginx (reverse proxy) + приложение + PostgreSQL. Настройте auto-restart, лимиты ресурсов и Let's Encrypt. Задание: приложение должно быть доступно по домену через HTTPS.
Чтобы освоить Docker Compose, нужно двигаться от базового Docker к практике и production-сценариям. Вот пошаговый план.
Освойте базовый Docker
Уверенно работайте с контейнерами: docker run, build, ps, exec, logs. Понимайте разницу между образом и контейнером. Без этого Compose будет казаться...
Напишите простой compose.yml
Начните с двух сервисов: веб-приложение (FastAPI) + Redis. Запустите, посмотрите логи, остановите. Добавьте третий — PostgreSQL. Поэкспериментируйте с...
Работа с окружениями
Изучите .env-файлы, profiles, несколько compose-файлов. Создайте compose.dev.yml с дополнительными сервисами (pgAdmin, Adminer) и запускайте их только в...
Интеграция в CI/CD
Настройте GitLab CI или GitHub Actions, который запускает docker compose up для тестов. Добавьте шаг сборки образа, прогон тестов, удаление контейнеров.
Соответствие — доля тем навыка, которые охватывает программа курса
Начать лучше с простого набора: приложение и база в одном compose-файле. Потом добавить переменные среды, volume для данных, отдельную сеть и один зависимый сервис вроде очереди или кеша.
Так быстрее видно, чем Compose отличается от длинного docker run и почему он полезен команде, а не только одному разработчику. На таком примере проще поймать типовые ошибки со связями сервисов, портами и именами хостов. И заодно становится понятнее, где заканчивается просто запуск и начинается поддержка среды. Потом стек уже легче расширять без хаоса.
Поднимите два сервиса в одном compose-файле и проверьте, что они видят друг друга.
Разведите конфигурацию запуска и постоянные данные, чтобы среда не сбрасывалась после рестарта.
Разберитесь, как контейнеры находят друг друга внутри общего стека.
Посмотрите, что происходит в логах, когда сервис не дождался базы или получил неверные параметры.
Инструмент для описания и запуска multi-container приложений одним YAML-файлом и одной командой docker compose up. Это как инструкция для оркестра: кто (какой сервис), где (образ), с чем (зависимости, сети, тома) и в каком порядке должен запускаться. Без Compose пришлось бы вручную вводить десятки docker run, связывать их сетями и следить за порядком старта.
Dockerfile — это инструкция по сборке одного образа: какие зависимости установить, какие файлы скопировать, какую команду выполнять при запуске. Docker Compose — это инструкция по запуску целой группы контейнеров (сервисов), которые вместе образуют приложение. Compose может использовать образы, собранные из Dockerfile или готовые из реестра. Они не взаимозаменяемы, а дополняют друг друга.
Основной файл конфигурации Docker Compose (раньше назывался docker-compose.yml). В нём на языке YAML описываются все сервисы приложения: для каждого указывается образ (или контекст сборки), порты, переменные окружения, тома, сети, зависимости от других сервисов, политики перезапуска и т.д. Современный стандарт — имя compose.yml.
Логическая единица в compose.yml — обычно один контейнер, но может быть и несколько его экземпляров при использовании директивы scale. Сервис описывает, какой образ запускать, с какими параметрами.
Актуальная — Compose V2, встроенная в Docker CLI (команда docker compose — без дефиса). Устаревшая V1 (docker-compose, с дефисом) была отдельной Python-утилитой и больше не развивается. Используйте docker compose для новых проектов.
Volumes (тома) — это механизм постоянного хранения данных вне контейнера. Если контейнер пересоздать, данные в томе сохранятся. Тома можно объявлять в корневом разделе volumes: и монтировать в любой сервис. Бывают именованные (например, pgdata) и анонимные (создаются автоматически, если не указано имя).
Сначала изучите базовый Docker: docker run, build, ps, exec, logs. Поймите разницу между образом и контейнером, научитесь монтировать тома и пробрасывать порты. Затем напишите простой compose.yml из двух сервисов: приложение + база данных. Постепенно добавляйте healthcheck, профили, несколько compose-файлов. Практика — ключ.
Базового уровня можно достичь за 2–3 дня активной практики: написать compose.yml, запустить два-три сервиса, разобраться с volumes и networks. Уверенное использование с CI/CD, профилями и несколькими окружениями — 1–2 недели. Ключевой фактор — практический проект: например, поднять локальное окружение для своего веб-приложения.
Достаточно базового понимания YAML: структура ключ-значение, отступы (спейсы, не табы), списки через дефис. Compose использует стандартный YAML без сложных конструкций. Освоите за час.
1) Локальное окружение для своего проекта (бэкенд + БД + кэш + очереди). 2) Автоматизированный тестовый стенд (приложение + Selenium Grid + заглушка внешнего API). 3) Деплой мини-сервиса на VPS через Compose с Nginx и Let's Encrypt.
Backend-разработчикам — для описания окружения с БД, кэшем и очередями. DevOps — для CI/CD тестов. QA-инженерам — для развёртывания тестовых стендов. Data-специалистам — для воспроизводимых экспериментов с Jupyter, БД и ML-моделями.
Нет. Это навык внутри других ролей. Отдельных вакансий «Docker Compose developer» не существует. Compose — часть экосистемы Docker, и работодатели ожидают его как базовый инструмент, а не как специализацию.
Косвенно. Без него сложно устроиться на позицию middle+ DevOps или backend, потому что Compose — стандарт описания окружения. Но зарплату определяет роль, грейд и соседний стек (Kubernetes, CI/CD, облачные технологии), а не сам Compose.
Если фронтенд общается с бэкендом, который локально поднимается через Compose — да, он полезен для понимания, как настроить API для разработки. Но это не обязательное требование для вакансий фронтендера.
Да, особенно middle+ QA-автоматизаторам. Compose позволяет разворачивать тестовые стенды одной командой: приложение, Selenium, заглушки. Это стандарт для интеграционного тестирования.
Да, если нужно воспроизводимое окружение для экспериментов: Jupyter Notebook + БД + ML-модель как REST API. Compose удобнее, чем ручное управление контейнерами.
Создайте файл compose.yml: services: web: image: nginx:alpine ports: - "8080:80". Выполните docker compose up -d. Откройте http://localhost:8080. Вы увидите стартовую страницу Nginx.
Создайте файл .env в той же папке, что и compose.yml. Compose автоматически подставит переменные в любой сервис. В .env: DB_PASSWORD=secret. В сервисе: environment: DB_PASSWORD: ${DB_PASSWORD}. Альтернативно — укажите env_file: .env.
Не дублируйте общие настройки. Используйте 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 изучают, когда нужно масштабировать приложение на несколько серверов и управлять отказоустойчивостью. Compose — логичная ступень перед Kubernetes.
Podman Compose — аналог для систем без Docker daemon (RHEL, Fedora). Файлы совместимы, команды почти идентичны. Если вы на Linux и хотите rootless (без прав root) — выбирайте Podman. В остальных случаях — Docker Compose.
Если контейнеров больше двух и вы запускаете их регулярно — однозначно Compose. docker run — для разовых экспериментов с одним контейнером. Compose экономит время, снижает риск ошибок и обеспечивает воспроизводимость.
Это разные вещи. «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.