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


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

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

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

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

NumWords задает число слов для вывода в STDOUT.

MinLength обозначает минимальную длину учитываемых слов в символах. Если увеличить это значение, скрипт будет пропускать самые распространенные слова, например of и the.

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

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Сведения о начале работы см. в статье "Установка Azure 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'

Как только состояние обоих контейнеров станет Terminated (Завершен) (используйте 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, за исключением использования аргумента командной строки -EnvironmentVariable.

Сначала запустите контейнер 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-AzContainerGroupContainer -Name "mycontainer2" `
            -EnvironmentVariable $envVars
    )

Как только состояние обоих контейнеров станет Terminated (Завершен) (используйте команду 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, можно увидеть, как переменные среды изменяют поведение скрипта. Отображаются только пять слов, каждое из которых имеет длину не менее восьми символов.

Выходные данные журналов контейнера на портале

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

Объекты с безопасными значениями предназначены для хранения конфиденциальных данных, например паролей или ключей приложения. Использовать безопасные значения для переменных среды — более безопасный и гибкий способ по сравнению с добавлением значений в образ контейнера. Другой вариант — использовать тома secret, описанные в статье Подключение тома secret в службе "Экземпляры контейнеров 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

Следующие шаги

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