Поиск по сайту:

Как использовать профили служб для упрощения стеков в 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, чтобы начать выборочное включение служб.




Все права защищены. © Linux-Console.net • 2019-2024