Docker Compose — Управление сервисами
Эта страница объясняет базовые команды docker compose, которые используются для запуска, остановки, пересборки и перезапуска сервисов в проекте. Материал рассчитан на начинающих: здесь разобрано, что делает каждая команда, в каких случаях её использовать и на что обратить внимание, чтобы случайно не сломать рабочее окружение.
Что такое Docker Compose
Docker Compose — это инструмент для управления многоконтейнерныминесколькими приложениями.контейнерами Основнойкак единым приложением.
Обычно в проекте есть файл конфигурацииdocker-compose.yml, —где описано:
- какие сервисы нужно запускать
- какие образы использовать
- какие порты пробрасывать
- какие папки подключать как volumes
- какие переменные окружения передавать контейнерам
Например, один проект может состоять из:
nginxphpmysqlredis
Вместо того чтобы запускать каждый контейнер отдельно длинными командами docker run, Compose позволяет поднять всё одной командой.
Перед началом работы
Обычно работа с Compose ведётся из директории проекта, где лежит docker-compose.yml.
Пример:
cd /opt/flamy_projects/project_name
Проверить, что файл действительно есть в текущей папке:
ls -la
Если нужно найти compose-файлы во всей папке проектов:
find /opt/flamy_projects -type f -name "docker-compose*.yml"
Примечание: Большинство команд
docker composeнужно выполнять именно в той директории, где находитсяdocker-compose.yml. Иначе Docker не поймёт, с каким проектом работать.
Базовый принцип работы
Чаще всего цикл работы выглядит так:
- перейти в папку проекта
- запустить сервисы
- проверить, что контейнеры работают
- посмотреть логи при ошибках
- при необходимости пересобрать или перезапустить сервисы
Запуск и остановка сервисов
Запуск контейнероввсех сервисов в фоне
docker compose up -d
ЗапускаетЭта всекоманда:
- читает
docker-compose.yml. - создаёт нужные контейнеры
- запускает их
- оставляет терминал свободным для дальнейшей работы
Флаг:
-d —означает detached mode, то есть запуск в фоне (detached mode).фоне.
Когда использовать
Подходит почти для любого обычного старта проекта:
- после перезагрузки сервера
- после первого клонирования проекта
- после остановки контейнеров
- после мелких изменений конфигурации
Пример
cd /opt/flamy_projects/site1
docker compose up -d
Что важно помнить
Если образа ещё нет локально, Docker попытается:
- скачать его из реестра
- либо собрать локально, если это описано в конфигурации
Для новичков:
upне всегда означает просто «включить». Эта команда может не только запускать, но и создавать контейнеры заново, если это требуется по конфигурации.
Остановка и удаление контейнеров проекта
Остановка контейнеровпроекта
docker compose down
ОстанавливаетКоманда останавливает и удаляет:
- контейнеры проекта
- созданные Compose-сети
Когда использовать
Подходит, если нужно:
- полностью выключить проект
- освободить ресурсы
- заново поднять окружение
- сбросить сетевые проблемы внутри проекта
Что команда Нене удаляет
По умолчанию docker compose down не удаляет volumes.volumes.
Это важно, потому что именно в volumes часто лежат данные:
- база данных
- загруженные файлы
- кэш приложения
- постоянные данные сервисов
Важно: Для новичков это одна из самых полезных вещей: обычный
downне стирает данные сам по себе. Но всё равно всегда нужно понимать, где именно проект хранит данные — в volumes, bind mounts или внутри контейнера.
Пример
docker compose down
После этого проект можно снова поднять:
docker compose up -d
Принудительное пересоздание контейнеров
Пересоздать контейнеры даже без изменений
docker compose up -d --force-recreate
docker compose up -d --force-recreate
КонтейнерыЭта будуткоманда пересозданызаставляет Docker пересоздать контейнеры, даже если конфигурацияон считает, что ничего не изменилась.поменялось.
Когда использовать
Важно:Полезно, если:
Volumes
- контейнер
этомведёт себя странно - изменились переменные окружения
- конфигурация применена не
удаляютсятак, как ожидалось - нужен «чистый» перезапуск контейнера без удаления volumes
Что важно помнить
- контейнеры будут пересозданы
- volumes останутся на месте
- данные в volumes не пропадут
Пояснение: Контейнер и volume — это не одно и то же. Контейнер — это «запущенная оболочка приложения». Volume — это место, где могут лежать постоянные данные. Поэтому пересоздание контейнера не обязательно означает потерю данных.
Пересборка контейнеров
образов
Пересборка нужна тогда, когда меняется не только запуск контейнера, а именно его образ. Обычно это происходит, если вы изменили:
Dockerfile- системные пакеты
- зависимости приложения
- шаги сборки
ПолнаяПересборка пересборкабез образовиспользования кэша
docker compose build --no-cache
Игнорирует cache Docker ипри пересобираетсборке всестарается слои.использовать кэш, чтобы не выполнять одинаковые шаги повторно.
Это ускоряет работу, но иногда мешает, если нужен действительно «чистый» rebuild.
ИспользуетсяФлаг когда:--no-cache говорит:
не использовать ранее сохранённые слои, а собрать всё заново.
Когда использовать
Подходит, если:
обновилсяизмененияbaseвimageDockerfile «не подхватываются»изменилисьобновились зависимости- есть подозрение на устаревший build cache
- нужно убедиться, что образ собран полностью с нуля
Пример
docker compose build --no-cache
docker compose up -d
Примечание: Эта операция может занять заметно больше времени, чем обычная сборка.
ПересборкаПересобрать и запусксразу запустить
docker compose up -d --build
Docker:Команда делает два действия сразу:
пересоберётприобразынеобходимости пересобирает образзапуститзапускает контейнеры
Когда использовать
Это один из самых частых сценариев после изменения:
Dockerfile- зависимостей
- конфигурации сборки
Пример
docker compose up -d --build
Чем отличается от build --no-cache
docker compose up -d --buildможет использовать кэшdocker compose build --no-cacheсобирает всё полностью заново
Если нужно просто обновить контейнер после обычных изменений — чаще хватает:
docker compose up -d --build
Если есть сомнения в корректности кэша — используйте:
docker compose build --no-cache
docker compose up -d
Обновление образов из registryреестра
Скачать свежие версии образов
docker compose pull
docker compose pull
СкачиваетКоманда скачивает новые версии образовобразов, которые указаны в docker-compose.yml.
Когда использовать
Подходит, если проект использует готовые образы из Dockerregistry, Registry.например:
nginx:latestredis:7mysql:8
Важный момент
docker compose pull только скачивает образы, но не перезапускает контейнеры автоматически.
ЧастоЧтобы используетсяприменить передобновление, обновлением:обычно выполняют:
docker compose pull && docker compose up -d
Пример
cd /opt/flamy_projects/site1
docker compose pull
docker compose up -d
Важно: На production-серверах обновление образов нужно делать осторожно. Новая версия образа может изменить поведение приложения или сломать совместимость.
Перезапуск сервисов
Иногда контейнер не нужно пересобирать или пересоздавать — достаточно просто перезапустить процесс.
РестартПерезапуск одного сервиса
docker compose restart <service>
Пример:
docker compose restart nginx
Когда использовать
Подходит, если:
- сервис завис
- нужно перечитать конфигурацию
- произошёл временный сбой
- после некоторых изменений достаточно обычного рестарта
РестартПерезапуск всех сервисов
docker compose restart
Перезапускает все сервисы, описанные в compose-файле.
Когда использовать
Подходит, если:
- нужно быстро перезапустить весь проект
- нет уверенности, какой именно сервис работает некорректно
- нужно «освежить» всё окружение без удаления контейнеров
ПерезапускОстановка черези stop/startзапуск отдельного сервиса вручную
Иногда используется для полной остановки:
docker compose stop <service> && docker compose start <service>
Пример:
docker compose stop php && docker compose start php
Зачем это нужно, если есть restart
Иногда удобнее разделить действия на две части:
- сначала корректно остановить контейнер
- затем отдельно запустить снова
Это бывает полезно при диагностике или когда нужно убедиться, что сервис полностью остановился.
ПолезныеЗапуск команды
Запусктолько одного сервиса
docker compose up -d <service>
Пример:
docker compose up -d nginx
Когда использовать
Полезно, если:
- нужно поднять только один сервис
- вы тестируете конкретный контейнер
- не хотите трогать всё окружение
Примечание: Если сервис зависит от других, Compose может поднять и их тоже.
ПросмотрПроверка итоговой конфигурации
composeПосмотреть итоговый compose-конфиг
docker compose config
docker compose config
ПоказываетЭта итоговыйкоманда конфигпоказывает итоговую конфигурацию после обработки:
env variablesdocker-compose.ymloverridesoverride-файлов- переменных окружения
- подстановок из
.env
Когда использовать
Очень полезно приперед отладке.запуском, если:
- не подставляются env-переменные
- есть сомнения в корректности конфигурации
- нужно понять, что Docker реально «видит»
Почему это важно для новичков
Иногда в YAML всё выглядит правильно, но итоговая конфигурация получается другой.
docker compose config помогает увидеть конечный результат до запуска.
Наиболее частые сценарии в работе
Обычный запуск проекта
docker compose up -d
Обновить образы и применить изменения
docker compose pull && docker compose up -d
После изменения Dockerfile или зависимостей
docker compose up -d --build
Полная пересборка без кэша
docker compose build --no-cache
docker compose up -d
Быстро перезапустить один сервис
docker compose restart nginx
Полностью выключить проект
docker compose down
Что выбрать в типовых ситуациях
Ситуация: нужно просто запустить проект
Используйте:
docker compose up -d
Ситуация: поменялся Dockerfile
Используйте:
docker compose up -d --build
Ситуация: образ ведёт себя странно, нужен чистый rebuild
Используйте:
docker compose build --no-cache
docker compose up -d
Ситуация: нужно скачать свежие образы из registry
Используйте:
docker compose pull && docker compose up -d
Ситуация: сервис просто нужно перезапустить
Используйте:
docker compose restart <service>
Частые ошибки новичков
Запуск команды не из той директории
Если выполнить docker compose up -d не там, где лежит docker-compose.yml, можно получить ошибку о том, что конфигурационный файл не найден.
Путаница между restart, up, build и down
Кратко:
restart— просто перезапуск уже существующих контейнеровup— поднять проектup --build— поднять проект с пересборкойdown— остановить и удалить контейнеры проекта
Ожидание, что pull сам обновит работающие контейнеры
docker compose pull только скачивает новый образ.
Чтобы контейнеры начали работать на новой версии, нужен ещё запуск:
docker compose up -d
Краткая памятка
docker compose up -d # Запуск проекта в фоне
docker compose down # Остановка и удаление контейнеров проекта
docker compose up -d --force-recreate # Пересоздать контейнеры принудительно
docker compose build --no-cache # Полная пересборка без кэша
docker compose up -d --build # Пересборка и запуск
docker compose pull # Скачать свежие образы
docker compose restart <service> # Перезапуск одного сервиса
docker compose restart # Перезапуск всех сервисов
docker compose stop <service> && docker compose start <service> # Остановить и запустить сервис отдельно
docker compose up -d <service> # Запуск одного сервиса
docker compose config # Проверка итоговой конфигурации
Итог
docker compose — это основной инструмент ежедневной работы с контейнеризированным проектом.
Для большинства задач обычно достаточно понимать четыре базовых действия:
up -d— запуститьdown— остановитьup -d --build— пересобрать и запуститьrestart— перезапустить
Остальные команды полезны как дополнение, когда нужно глубже управлять окружением или разбираться с проблемами.