Сервисы, depends-on & restart
Тема дорожной карты · Docker & Containers
Блок services: в файле docker-compose.yml описывает каждый контейнер, который будет запущен в рамках вашего приложения. Функциональность depends_on позволяет вам управлять порядком запуска контейнеров, гарантируя, что один контейнер будет запущен только после успешного запуска его зависимостей. Параметр restart: (no, on-failure, always, unless-stopped) определяет, как контейнер должен действовать при сбое. Это важные элементы для управления жизненным циклом контейнеров и обеспечения их стабильной работы. В частности, restart: "unless-stopped" полезен для прод-подобных сред, где контейнеры должны перезапускаться после сбоев, в то время как restart: "no" может быть использовано для одноразовых задач, таких как интеграционные тесты, чтобы избежать накопления логов.
Как это работает
Сервисы, depends_on и параметр restart: являются ключевыми элементами в файле конфигурации docker-compose.yml. Этот файл описывает multi-container приложения как код, используя YAML-синтаксис. Внутри конфигурации вы перечисляете сервисы, сети, томы и их взаимосвязи. Команда docker compose up поднимает весь стек контейнеров, а команда docker compose down гасит его. Docker Compose создаёт изолированную сеть для каждого проекта, что позволяет сервисам находить друг друга по имени. Он также поддерживает переопределение конфигурации через файл .env и использование переменных окружения с помощью ${VAR}.
Когда применять
Docker Compose идеален для разработки, маленьких single-host production-деплоев и интеграционных тестов в CI/CD системах. Однако, для управления многими хостами или сложными оркестрациями контейнеров лучше использовать Kubernetes (или Nomad, или Docker Swarm). В production-средах важно закреплять теги образов по digest, чтобы избежать нестабильности, связанной с использованием плавающего тега :latest.
Типичные ошибки
При работе с сервисами, depends_on и параметром restart: часто встречаются следующие ошибки:
- Путаница между версиями
docker-compose(отдельная Python-утилита, EOL) иdocker compose(Go-плагин, актуальная). - Коммитирование файла
.envв репозиторий Git, что может привести к утечке конфиденциальной информации. - Неправильное использование
depends_on, которое ждёт только старта контейнера, а не его готовности. Для более надежного управления можно использоватьhealthcheckс условиемcondition: service_healthy. - Забывание переименовать named volumes при переименовании проекта, что может привести к проблемам с данными.
Связанные понятия
Полезные ресурсы
Проверить знания (1)
Загрузка вопросов…