Поделиться через


Настройка переменных среды в экземплярах контейнеров

Используя переменные среды в экземплярах контейнеров, вы можете динамически изменять конфигурацию приложения или скрипта, запущенных в контейнере. Эта функция аналогична аргументу командной строки --env для docker run.

Чтобы задать переменные среды в контейнере, укажите их при создании экземпляра контейнера. В этой статье показаны примеры настройки переменных среды при запуске контейнера с помощью Azure CLI, Azure PowerShell и портала Azure.

Например, если запустить образ контейнера Microsoft aci-wordcount, можно изменить его поведение, указав следующие переменные среды:

NumWords: количество слов, отправленных в STDOUT.

MinLength: минимальное число символов в слове для подсчета. Большое число игнорирует распространенные слова, такие как "of" и "the".

Это важно

Если необходимо передать секреты в качестве переменных среды, экземпляры контейнеров Azure поддерживают безопасные значения для контейнеров Windows и Linux.

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Сведения о начале работы см. в статье "Установка Azure PowerShell". Чтобы узнать, как перейти на модуль Az PowerShell, см. статью Миграция Azure PowerShell с AzureRM на Az.

Пример для Azure CLI

Чтобы просмотреть выходные данные контейнера aci-wordcount по умолчанию, запустите его сначала с помощью команды az container create (без указанных переменных среды):

az container create \
    --resource-group myResourceGroup \
    --name mycontainer1 \
    --image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
    --restart-policy OnFailure

Чтобы изменить выходные данные, запустите второй контейнер с --environment-variables добавленным аргументом, указав значения для переменных NumWords и MinLength . (В этом примере предполагается, что интерфейс командной строки выполняется в оболочке Bash или Azure Cloud Shell. Если вы используете командную строку Windows, укажите переменные с двойными кавычками, например --environment-variables "NumWords"="5" "MinLength"="8".)

az container create \
    --resource-group myResourceGroup \
    --name mycontainer2 \
    --image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
    --restart-policy OnFailure \
    --environment-variables 'NumWords'='5' 'MinLength'='8'

Когда состояние обоих контейнеров отображается как "Завершено " (используйте az container show для проверки состояния), отобразите свои журналы с помощью az container logs , чтобы просмотреть выходные данные.

az container logs --resource-group myResourceGroup --name mycontainer1
az container logs --resource-group myResourceGroup --name mycontainer2

Выходные данные контейнеров показывают, как вы изменили поведение скрипта второго контейнера, задав переменные среды.

mycontainer1

[('the', 990),
 ('and', 702),
 ('of', 628),
 ('to', 610),
 ('I', 544),
 ('you', 495),
 ('a', 453),
 ('my', 441),
 ('in', 399),
 ('HAMLET', 386)]

mycontainer2

[('CLAUDIUS', 120),
 ('POLONIUS', 113),
 ('GERTRUDE', 82),
 ('ROSENCRANTZ', 69),
 ('GUILDENSTERN', 54)]

Пример Azure PowerShell

Настройка переменных среды в PowerShell подобна процессу в CLI, но здесь используется аргумент командной строки.

Сначала запустите контейнер aci-wordcount в конфигурации по умолчанию с помощью этой команды New-AzContainerGroup :

New-AzContainerGroup `
    -ResourceGroupName myResourceGroup `
    -Name mycontainer1 `
    -Image mcr.microsoft.com/azuredocs/aci-wordcount:latest

Теперь выполните следующую команду New-AzContainerGroup . Этот указывает переменные среды NumWords и MinLength после заполнения переменной массива: envVars

$envVars = @(
    New-AzContainerInstanceEnvironmentVariableObject -Name "NumWords" -Value "5"
    New-AzContainerInstanceEnvironmentVariableObject -Name "MinLength" -Value "8"
)

$containerGroup = New-AzContainerGroup -ResourceGroupName "myResourceGroup" `
    -Name "mycontainer2" `
    -Image "mcr.microsoft.com/azuredocs/aci-wordcount:latest" `
    -RestartPolicy "OnFailure" `
    -Container @(
        New-AzContainerInstanceContainer -Name "mycontainer2" `
            -EnvironmentVariable $envVars
    )

После того как состояние обоих контейнеров изменится на Завершено (используйте Get-AzContainerInstanceLog для проверки состояния), извлеките их журналы с помощью команды Get-AzContainerInstanceLog.

Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer1
Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer2

Выходные данные для каждого контейнера показывают, как вы изменили скрипт, выполняемый контейнером, задав переменные среды.

PS Azure:\> Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer1
[('the', 990),
 ('and', 702),
 ('of', 628),
 ('to', 610),
 ('I', 544),
 ('you', 495),
 ('a', 453),
 ('my', 441),
 ('in', 399),
 ('HAMLET', 386)]

Azure:\
PS Azure:\> Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer2
[('CLAUDIUS', 120),
 ('POLONIUS', 113),
 ('GERTRUDE', 82),
 ('ROSENCRANTZ', 69),
 ('GUILDENSTERN', 54)]

Azure:\

Пример портала Azure

Чтобы задать переменные среды при запуске контейнера на портале Azure, укажите их на странице "Дополнительно " при создании контейнера.

  1. На странице "Дополнительно" установите политику перезапуска на "При сбое"
  2. В разделе переменные среды введите NumWords со значением 5 для первой переменной и введите MinLength со значением 8 для второй переменной.
  3. Выберите "Проверить и создать", чтобы выполнить проверку, а затем развертывание контейнера.

Страница портала с переменной среды, кнопкой включения и текстовыми полями

Чтобы просмотреть журналы контейнера, в разделе "Параметры " выберите "Контейнеры" и " Журналы". Как и в выходных данных, показанных в предыдущих разделах CLI и PowerShell, можно увидеть, как переменные среды изменяют поведение скрипта. Отображаются только пять слов, каждая из которых имеет минимальную длину восьми символов.

Портал с выходными данными журнала контейнеров

Безопасные значения

Объекты с безопасными значениями предназначены для хранения конфиденциальных данных, например паролей или ключей приложения. Использовать безопасные значения для переменных среды — более безопасный и гибкий способ по сравнению с добавлением значений в образ контейнера. Другим вариантом является использование секретных томов, описанных в статье "Подключение секретного тома в экземлярах контейнеров Azure".

Переменные среды с безопасными значениями не отображаются в свойствах контейнера—их значения доступны только внутри контейнера. Например, свойства контейнера, просматриваемые на портале Azure или с помощью Azure CLI, отображают только имя безопасной переменной, а не ее значение.

Установите безопасную переменную среды, указав для типа переменной свойство secureValue вместо обычного value. В следующем файле YAML представлены две переменные двух разных типов.

Развертывание YAML

secure-env.yaml Создайте файл со следующим фрагментом кода.

apiVersion: 2019-12-01
location: eastus
name: securetest
properties:
  containers:
  - name: mycontainer
    properties:
      environmentVariables:
        - name: 'NOTSECRET'
          value: 'my-exposed-value'
        - name: 'SECRET'
          secureValue: 'my-secret-value'
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      ports: []
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
  osType: Linux
  restartPolicy: Always
tags: null
type: Microsoft.ContainerInstance/containerGroups

Выполните следующую команду, чтобы развернуть группу контейнеров с помощью YAML (при необходимости настройте имя группы ресурсов):

az container create --resource-group myResourceGroup --file secure-env.yaml

Проверка переменных среды

Выполните команду az container show , чтобы запросить переменные среды контейнера:

az container show --resource-group myResourceGroup --name securetest --query 'containers[].environmentVariables'

В ответе JSON отображаются ключ и значение небезопасной переменной среды, но только имя переменной безопасной среды:

[
  [
    {
      "name": "NOTSECRET",
      "secureValue": null,
      "value": "my-exposed-value"
    },
    {
      "name": "SECRET",
      "secureValue": null,
      "value": null
    }
  ]
]

С помощью команды az container exec , которая позволяет выполнять команду в работающем контейнере, можно убедиться, что задана переменная безопасной среды. Выполните следующую команду, чтобы запустить интерактивный сеанс bash в контейнере:

az container exec --resource-group myResourceGroup --name securetest --exec-command "/bin/sh"

После открытия интерактивной оболочки в контейнере можно получить доступ к значению переменной SECRET :

root@caas-ef3ee231482549629ac8a40c0d3807fd-3881559887-5374l:/# echo $SECRET
my-secret-value

Дальнейшие действия

Сценарии на основе задач, такие как пакетная обработка большого набора данных с несколькими контейнерами, могут воспользоваться пользовательскими переменными среды во время выполнения. Дополнительные сведения о выполнении контейнеров на основе задач см. в статье Выполнение контейнерных задач с помощью политик перезапуска.