Как использовать профили служб для упрощения стеков в Docker Compose
Docker Compose теперь поддерживает профили для выборочного использования сервисов. Службы в вашем docker-compose.yml
могут быть связаны с одним или несколькими именованными профилями. Передача имени профиля в docker-compose up
запустит только службы в этом профиле, что позволит вам создать варианты стека для определенных сред и конфигураций.
Compose ранее сосредоточился на определении единого стека, который является каноническим дистрибутивом вашего приложения. Профили добавляют больше возможностей для настройки используемых частей стека, делая сложные наборы сервисов более модульными и настраиваемыми.
Зачем использовать профили?
Использование профилей не является обязательным. Ваши существующие файлы Docker Compose будут продолжать работать, и нет необходимости сразу же применять профили.
Профили служб решают несколько распространенных проблем с потоками разработки и тестирования Docker Compose. У вас могут быть службы, которые вы хотите использовать только в процессе разработки, например контейнер отладки или служба ведения журнала. Когда вы работаете, вам не нужны эти сервисы, и вы не хотите их запускать.
Раньше для этого требовалось разбивать определения службы на несколько файлов. Затем вам понадобится громоздкая команда up
, чтобы запустить все в разработке:
# docker-compose.yml version: "3" services: app: image: my-app:latest # docker-compose-dev.yml version: "3" services: debug: image: my-app-debug:latest
# start in production
docker-compose up -d
# start in development
docker-compose -f docker-compose.yml -f docker-compose-dev.yml up -d
Профили позволяют объединить оба определения службы в один файл. Вы можете использовать флаг или переменную среды для выбора определенного профиля, не вводя пути к файлам вручную. Это создает более удобный опыт, который упрощает документирование, запись и запуск.
Определение профилей
Профили создаются путем установки поля profiles
для служб в файле docker-compose.yml
. Профили указаны в виде списка. Каждому сервису может быть присвоен один или несколько профилей.
version: "3" services: app: image: my-app:latest debug: image: my-app-debug:latest profiles: - dev
Экземпляры профиля создаются неявным образом из имен, заданных вашим полям profiles
. Службы, которые имеют общий профиль, автоматически присоединяются.
Чтобы запустить службы, включенные в профиль, добавьте флаг --profile
в docker-compose up
:
docker-compose up --profile dev
Эта команда запускает службы app
и debug
из указанного выше файла Compose. Если вы запустите docker-compose up
, опуская флаг --profile
, запустится только служба app
.
Вы можете запустить несколько профилей одновременно, повторив флаг --profile
. Compose также поддерживает переменную среды COMPOSE_PROFILES
в качестве альтернативы --profile
. Это принимает список имен профилей, разделенных запятыми.
Службы без поля profiles
всегда будут запущены, независимо от запрошенного профиля. После того, как сервису был присвоен профиль, он запустится только в том случае, если этот профиль был запрошен. Для служб с несколькими профилями запрос любого из них позволит запустить службу.
Неявные запуски профиля
Профили всегда будут игнорироваться, если вы вручную запустите службу с помощью docker-compose run
. В этом случае Compose также запустит любые службы, от которых зависит запрошенная служба, если они имеют общий профиль или не имеют назначенного профиля.
Здесь запуск docker-compose run debug
запустит службу debug-utils
, даже если профиль dev
не выбран явно:
version: "3" services: app: image: my-app:latest debug-utils: image: my-app-debug-utils:latest profiles: - dev debug: image: my-app-debug:latest depends_on: debug-utils profiles: - dev
Неявные запуски применяются только к прямым зависимостям указанной службы. Если у debug-utils
также был depends_on
и эта служба не использовала общий профиль dev
, она не запустилась бы правильно.
Чтобы разрешение зависимостей работало должным образом с docker-compose run
, все службы в дереве должны совместно использовать профиль самой верхней службы или быть постоянно включенными. Если ни одно из этих условий не выполняется, вам нужно будет добавить флаг --profile
, чтобы явно активировать любые дополнительные необходимые профили.
Краткое содержание
Профили служб — это удобная функция Compose, упрощающая управление различными сочетаниями служб. Используя профили, вы можете избежать разделения служб на несколько файлов Compose. Добавление --profile
обычно кажется более естественным, чем объединение нескольких файлов YAML вместе.
Профили позволяют создавать подстеки в основном приложении Compose. Их введение как часть спецификации Compose является признанием того, что разрабатываемые стеки часто включают в себя дополнительные службы помимо тех, которые используются в рабочей среде.
В более общем плане профили делают Compose более универсальным, упрощая настройку стека. Хотя профили задумывались как подход к управлению средой, они также могли бы помочь сообществу создавать различные варианты популярных изображений. Подумайте о docker-compose.yml
WordPress с профилями mysql
и mariadb
: теперь вы можете легко переключаться между предварительно настроенными службами базы данных, чтобы выбрать двигатель, соответствующий вашим предпочтениям.
Docker Compose 1.28 представил профили ранее в этом году. Если у вас есть последняя версия двоичного файла Compose или Docker Desktop для Windows и Mac, вы можете добавить профили
в файлы Compose, чтобы начать выборочное включение служб.