Definir variáveis de ambiente em instâncias de contêiner

Definir variáveis de ambiente nas suas instâncias de contentor permite-lhe oferecer configuração dinâmica da aplicação ou do script executado pelo contentor. Esse recurso é semelhante ao argumento de linha de --env comando para docker run.

Para definir variáveis de ambiente em um contêiner, especifique-as ao criar uma instância de contêiner. Este artigo mostra exemplos de configuração de variáveis de ambiente quando você inicia um contêiner com a CLI do Azure, o Azure PowerShell e o portal do Azure.

Por exemplo, se você executar a imagem de contêiner Microsoft aci-wordcount, poderá modificar seu comportamento especificando as seguintes variáveis de ambiente:

NumWords: O número de palavras enviadas para STDOUT.

MinLength: O número mínimo de caracteres em uma palavra para que ela seja contada. Um número maior ignora palavras comuns como "de" e "o".

Se você precisar passar segredos como variáveis de ambiente, as Instâncias de Contêiner do Azure dão suporte a valores seguros para contêineres Windows e Linux.

Nota

Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Exemplo de CLI do Azure

Para ver a saída padrão do contêiner aci-wordcount, execute-o primeiro com este comando az container create (sem variáveis de ambiente especificadas):

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

Para modificar a saída, inicie um segundo contêiner com o --environment-variables argumento adicionado, especificando valores para as variáveis NumWords e MinLength . (Este exemplo pressupõe que você execute a CLI em um shell Bash ou Azure Cloud Shell. Se você usar o Prompt de Comando do Windows, especifique as variáveis com aspas duplas, como --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'

Quando o estado de ambos os contêineres for exibido como Terminado (use az container show para verificar o estado), exiba seus logs com logs de contêiner az para ver a saída.

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

As saídas dos contêineres mostram como você modificou o comportamento do script do segundo contêiner definindo variáveis de ambiente.

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)]

Exemplo do Azure PowerShell

A configuração de variáveis de ambiente no PowerShell é semelhante à CLI, mas usa o argumento de linha de -EnvironmentVariable comando.

Primeiro, inicie o contêiner aci-wordcount em sua configuração padrão com este comando New-AzContainerGroup :

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

Agora execute o seguinte comando New-AzContainerGroup . Este especifica as variáveis de ambiente NumWords e MinLength depois de preencher uma variável de matriz, 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
    )

Quando o estado de ambos os contêineres for Terminated (use Get-AzContainerInstanceLog para verificar o estado), puxe seus logs com o comando Get-AzContainerInstanceLog .

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

A saída para cada contêiner mostra como você modificou o script executado pelo contêiner definindo variáveis de ambiente.

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:\

Exemplo de portal do Azure

Para definir variáveis de ambiente ao iniciar um contêiner no portal do Azure, especifique-as na página Avançado ao criar o contêiner.

  1. Na página Avançado, defina a política de reinicialização como Em falha
  2. Em Variáveis de ambiente, entre NumWords com um valor de 5 para a primeira variável e entre MinLength com um valor de 8 para a segunda variável.
  3. Selecione Rever + criar para verificar e, em seguida, implementar o contentor.

Página do portal mostrando a variável de ambiente Botão Ativar e caixas de texto

Para exibir os logs do contêiner, em Configurações, selecione Contêineres e, em seguida, Logs. Semelhante à saída mostrada nas seções anteriores da CLI e do PowerShell, você pode ver como as variáveis de ambiente alteram o comportamento do script. Apenas cinco palavras são exibidas, cada uma com um comprimento mínimo de oito caracteres.

Portal mostrando saída de log de contêiner

Valores seguros

Objetos com valores seguros destinam-se a armazenar informações confidenciais, como senhas ou chaves para seu aplicativo. Usar valores seguros para variáveis de ambiente é mais seguro e flexível do que incluí-los na imagem do contêiner. Outra opção é usar volumes secretos, descritos em Montar um volume secreto em Instâncias de Contêiner do Azure.

As variáveis de ambiente com valores seguros não são visíveis nas propriedades do contêiner - seus valores podem ser acessados somente de dentro do contêiner. Por exemplo, as propriedades de contêiner exibidas no portal do Azure ou na CLI do Azure exibem apenas o nome de uma variável segura, não seu valor.

Defina uma variável de ambiente seguro especificando a secureValue propriedade em vez da regular value para o tipo da variável. As duas variáveis definidas no YAML a seguir demonstram os dois tipos de variáveis.

Implantação do YAML

Crie um secure-env.yaml arquivo com o seguinte trecho.

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

Execute o seguinte comando para implantar o grupo de contêineres com YAML (ajuste o nome do grupo de recursos conforme necessário):

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

Verificar variáveis de ambiente

Execute o comando az container show para consultar as variáveis de ambiente do contêiner:

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

A resposta JSON mostra a chave e o valor da variável de ambiente inseguro, mas apenas o nome da variável de ambiente seguro:

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

Com o comando az container exec , que permite executar um comando em um contêiner em execução, você pode verificar se a variável de ambiente seguro está definida. Execute o seguinte comando para iniciar uma sessão bash interativa no contêiner:

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

Depois de abrir um shell interativo dentro do contêiner, você pode acessar o SECRET valor da variável:

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

Próximos passos

Cenários baseados em tarefas, como o processamento em lote de um grande conjunto de dados com vários contêineres, podem se beneficiar de variáveis de ambiente personalizadas em tempo de execução. Para obter mais informações sobre como executar contêineres baseados em tarefas, consulte Executar tarefas em contêineres com políticas de reinicialização.