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