Compose Watch для рабочего процесса разработки

Тема дорожной карты · Docker & Containers

docker compose watch — это мощный инструмент для синхронизации изменений исходного кода с работающими сервисами без необходимости ручного пересбора. Каждое правило в конфигурации имеет action, которое определяет, как реагировать на изменения: sync для кода с hot-reload, rebuild для случаев, когда изменения инвалидируют образ (например, Dockerfile, lock-файлы), и sync+restart для скомпилированных серверов. Настройка осуществляется в блоке develop.watch: для нужного сервиса в файле compose.yaml. Это значительно улучшает процесс разработки по сравнению с использованием bind-mount всего репозитория, особенно на платформах macOS и Windows, где производительность bind-mount значительно снижена.

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

Compose Watch для рабочего процесса разработки использует YAML-формат и командную линию для описания многоконтейнерных приложений как кода. Файл compose.yml перечисляет сервисы, сети, томы и их связи. Команда docker compose up поднимает весь стек контейнеров, а команда docker compose down гасит его. Docker Compose создаёт изолированную сеть для проекта, позволяет сервисам находить друг друга по имени и поддерживает переопределение через .env и переменные окружения ${VAR}. Профили (profiles: [dev]) позволяют включать или выключать опциональные сервисы.

Когда применять

Compose Watch эффективен для разработки, маленьких односерверных production-деплоев и интеграционных тестов в CI. Он особенно полезен для разработчиков, которые работают с многоконтейнерными приложениями. Однако, для многоконтейнерных оркестров, таких как Kubernetes, Nomad или Swarm, лучше использовать соответствующие инструменты. Секреты не следует хранить в compose.yml, а использовать .env через env_file: или Docker secrets. В production-конфигурациях рекомендуется закреплять теги образов по digest, чтобы избежать неопределённости, связанной с использованием плавающего :latest.

Типичные ошибки

Типичные ловушки при использовании Compose Watch включают в себя путаницу между версиями docker-compose (v1, отдельная Python-утилита, EOL) и docker compose (v2, Go-плагин, актуальная). Также часто коммитят .env в git, что может привести к утечке конфиденциальной информации. При использовании depends_on: важно помнить, что он ждёт старта контейнера, а не его готовности к работе (для проверки готовности используйте healthcheck: с condition: service_healthy). Наконец, при переименовании проекта важно не забывать переименовать также имена named volumes, так как они включают имя проекта.

Связанные понятия

Полезные ресурсы