Настройка переменных среды в экземплярах контейнеров
Используя переменные среды в экземплярах контейнеров, вы можете динамически изменять конфигурацию приложения или скрипта, запущенных в контейнере. Эта функция аналогична аргументу 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, укажите их на странице Расширенные параметры при создании контейнера.
- На странице Расширенные параметры задайте для параметра Политика перезапуска значение При сбое
- В параметре Переменные средывведите
NumWords
со значением5
для первой переменной и введитеMinLength
со значением8
для второй переменной. - Чтобы проверить и затем развернуть контейнер, выберите Просмотр и создание.
Чтобы просмотреть журналы контейнера, в разделе Параметры выберите Контейнеры, а затем — Журналы. Как и в выходных данных, показанных в предыдущих разделах 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
Следующие шаги
В скриптах на основе задач, таких как пакетная обработка большого набора данных с несколькими контейнерами, могут использоваться пользовательские переменные среды во время выполнения. Дополнительные сведения о выполнении контейнеров на основе задач см. в статье Выполнение контейнерных задач с помощью политик перезапуска.