Структура docker-compose.yml
Тема дорожной карты · Docker & Containers
Compose-файл служит для описания конфигурации многоконтейнерных приложений в формате YAML. Он позволяет разработчикам и администраторам систем легко управлять многими контейнерами одновременно, что делает его незаменимым инструментом для развертывания и тестирования приложений. Современное имя файла — compose.yaml; исторический docker-compose.yml всё ещё используется и работает. Top-level ключ version: устарел и его следует убрать из файла. Для избежания дублирования больших конфигураций рекомендуется использовать extends, YAML-якоря (&/*) и include. Перед коммитом валидируйте файл через docker compose config.
Для каждого логического приложения следует использовать отдельный файл. Различные окружения (например, prod и dev) можно разделить с помощью override-файлов (-f compose.yaml -f compose.override.yaml).
Как это работает
Структура docker-compose.yml — это YAML-формат и CLI для описания многоконтейнерных приложений как кода. Файл compose.yml перечисляет сервисы, сети, томы и их взаимосвязи. Команда docker compose up поднимает весь стек контейнеров, а команда docker compose down гасит его. Compose создаёт изолированную сеть для проекта, что позволяет сервисам находить друг друга по имени. Он также поддерживает override через .env файлы и переменные окружения (${VAR}).
Профили (profiles: [dev]) позволяют включать или выключать опциональные сервисы в зависимости от окружения. Это позволяет легко настраивать конфигурацию для различных сред разработки и тестирования.
Когда применять
Compose особенно полезен для разработки, маленьких single-host production-деплоев и интеграционных тестов в CI/CD. Однако для управления многими хостами следует использовать Kubernetes (или Nomad, или Docker Swarm). Секреты и конфиденциальные данные не следует хранить в compose.yml — используйте .env файлы через env_file: или Docker secrets. В production-конфигурациях рекомендуется закреплять теги образов по digest, чтобы избежать проблем с неопределенностью версий.
Типичные ошибки
Типичные ошибки при работе с docker-compose.yml включают путаницу между старой версией (docker-compose, отдельная Python-утилита, которая больше не поддерживается) и новой (docker compose, Go-плагин). Не следует коммитить .env файлы в git, так как они могут содержать конфиденциальную информацию. Также следует помнить, что ключ depends_on: ждёт старта контейнера, но не его готовности к работе. Для проверки готовности сервиса рекомендуется использовать healthcheck: с condition: service_healthy. Наконец, при переименовании проекта важно не забывать переименовать именованные томы, так как имя тома может включать имя проекта.