Docker Compose

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

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

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

Docker Compose использует YAML-формат для описания многоконтейнерных приложений. Файл compose.yaml содержит информацию о сервисах, сетях, томах и их взаимосвязях. Команда docker compose up запускает все контейнеры, описанные в файле, создавая изолированную сеть для проекта. Это позволяет сервисам находить друг друга по имени, что упрощает конфигурацию и взаимодействие между ними. Команда docker compose down останавливает и удаляет все запущенные контейнеры, сети и тома, возвращая систему в исходное состояние.

Compose также поддерживает переопределение конфигурации через файл .env, который содержит переменные окружения. Это позволяет использовать переменные ${VAR} в compose.yaml, что упрощает настройку и управление различными окружениями. Профили (profiles) позволяют включать или выключать опциональные сервисы, что делает конфигурацию более гибкой и адаптивной к различным требованиям.

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

Docker Compose идеально подходит для локальной разработки и интеграционных тестов, где требуется управление несколькими контейнерами. Он также полезен для небольших однохостовых production-деплоев, где требуется управление несколькими службами. Однако, для масштабирования на несколько хостов или для организации rolling-апдейтов, следует использовать более мощные инструменты, такие как Docker Swarm или Kubernetes.

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

Одной из распространенных ошибок при использовании Docker Compose является путаница между версией 1 (docker-compose, отдельная Python-утилита, уже устаревшая) и версией 2 (docker compose, Go-плагин, актуальная). Вторая ошибка — это коммит файла .env в систему контроля версий, такой как Git. Это может привести к утечке конфиденциальной информации, так как файл .env может содержать секреты или чувствительные данные.

Еще одна распространенная ошибка — это использование команды depends_on: для ожидания завершения запуска контейнера, вместо ожидания готовности приложения. Для более надежного управления жизненным циклом контейнеров следует использовать команду healthcheck:, которая проверяет состояние сервиса и ожидает его готовности. Наконец, забывание переименовать именованные томы при переименовании проекта также может привести к проблемам, так как имя тома включает имя проекта.

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

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