Impostare le variabili di ambiente nelle istanze di contenitore

L'impostazione delle variabili di ambiente nelle istanze di contenitore consente di offrire la configurazione dinamica dell'applicazione o dello script eseguiti dal contenitore. È simile all'argomento della riga di comando --env per docker run.

Per impostare le variabili di ambiente in un contenitore, specificarle quando si crea un'istanza del contenitore. Questo articolo illustra esempi di impostazione delle variabili di ambiente quando si avvia un contenitore con l'interfaccia della riga di comando di Azure, Azure PowerShell e il portale di Azure.

Ad esempio, se si esegue l'immagine del contenitore Microsoft aci-wordcount , è possibile modificarne il comportamento specificando le variabili di ambiente seguenti:

NumWords: il numero di parole inviate a STDOUT.

MinLength: il numero minimo di caratteri in una parola perché venga contata. Un numero più alto ignora le parole comuni, ad esempio "di" e "il".

Se è necessario passare segreti come variabili di ambiente, Istanze di Azure Container supporta valori sicuri per i contenitori Windows e Linux.

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Esempio di interfaccia della riga di comando di Azure

Per visualizzare l'output predefinito del contenitore aci-wordcount , eseguirlo prima con questo comando az container create (nessuna variabile di ambiente specificata):

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

Per modificare l'output, avviare un secondo contenitore con l'argomento --environment-variables aggiunto, specificando i valori per le variabili NumWords e MinLength . Questo esempio presuppone che l'interfaccia della riga di comando sia in esecuzione in una shell Bash o in un Cloud Shell di Azure. Se si usa il prompt dei comandi di Windows, specificare le variabili con virgolette doppie, ad esempio --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'

Dopo che lo stato di entrambi i contenitori risulta terminato (usare az container show per controllare lo stato), visualizzarne i log con az container logs per verificare l'output.

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

Gli output dei contenitori mostrano come è stato modificato il comportamento dello script del secondo contenitore impostando le variabili di 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)]

Esempio di Azure PowerShell

L'impostazione delle variabili di ambiente in PowerShell è simile all'interfaccia della riga di comando, ma usa l'argomento della riga di comando -EnvironmentVariable.

Avviare innanzitutto il contenitore aci-wordcount nella configurazione predefinita con questo comando New-AzContainerGroup :

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

Eseguire ora il comando New-AzContainerGroup seguente. che specifica le variabili di ambiente NumWords e MinLength dopo avere popolato un variabile di matrice, 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
    )

Dopo che lo stato di entrambi i contenitori è Terminato (usare Get-AzContainerInstanceLog per controllare lo stato), eseguire il pull dei log con il comando Get-AzContainerInstanceLog .

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

L'output di ogni contenitore mostra come si è modificato lo script eseguito dal contenitore impostando le variabili di 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:\

Esempio del portale di Azure

Per impostare le variabili di ambiente quando si avvia un contenitore nel portale di Azure, specificarle nella pagina Avanzate quando si crea il contenitore.

  1. Nella pagina Avanzate impostare i criteri di riavvio su
  2. In Variabili di 5 ambiente immettere NumWords con il valore per la prima variabile e immettere MinLength con il valore 8 per la seconda variabile.
  3. Selezionare Rivedi e crea per verificare e quindi distribuire il contenitore.

Pagina del portale che mostra il pulsante di abilitazione e le caselle di testo delle variabili di ambiente

Per visualizzare i log del contenitore, in Impostazioni selezionare Contenitori e quindi Log. Analogamente all'output illustrato nelle sezioni precedenti sull'interfaccia della riga di comando e PowerShell, è possibile visualizzare come il comportamento dello script è stato modificato dalle variabili di ambiente. Vengono visualizzate solo cinque parole, ognuna con una lunghezza minima di otto caratteri.

Portale che visualizza l'output del log del contenitore

Valori sicuri

Gli oggetti con valori sicuri sono progettati per contenere informazioni riservate, ad esempio le password o le chiavi per le applicazioni. L'uso di valori sicuri per le variabili di ambiente è sia più sicuro che più flessibile rispetto all'inclusione nell'immagine del contenitore. Un'altra opzione consiste nell'usare volumi segreti, come descritto in Montare un volume segreto in Istanze di Azure Container.

Le variabili di ambiente con valori sicuri non sono visibili nelle proprietà del contenitore: i relativi valori sono accessibili solo dall'interno del contenitore. Ad esempio, le proprietà del contenitore visualizzate nel portale di Azure o nell'interfaccia della riga di comando di Azure mostrano solo il nome della variabile sicura e non il suo valore.

Impostare una variabile di ambiente sicura, specificando la proprietà secureValue anziché il normale value per il tipo di variabile. Le due variabili definite nel file YAML seguente illustrano i due tipi di variabili.

Distribuzione con file YAML

Creare un file secure-env.yaml con il frammento seguente.

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

Eseguire il comando seguente per distribuire il gruppo di contenitori con YAML (modificare il nome del gruppo di risorse in base alle esigenze):

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

Verificare le variabili di ambiente

Eseguire il comando az container show per eseguire query sulle variabili di ambiente del contenitore:

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

La risposta JSON mostra sia la chiave che il valore della variabile di ambiente non sicura, ma solo il nome della variabile di ambiente sicura:

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

Con il comando az container exec, che abilita l'esecuzione di un comando in un contenitore in esecuzione, è possibile verificare che la variabile di ambiente sicura è stata impostata. Eseguire il comando seguente per avviare una sessione bash interattiva nel contenitore:

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

Dopo aver aperto una shell interattiva all'interno del contenitore, è possibile accedere al valore della variabile SECRET:

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

Passaggi successivi

Gli scenari basati su attività, ad esempio l'elaborazione batch di un set di dati di grandi dimensioni con diversi contenitori, possono trarre vantaggio dalle variabili di ambiente personalizzate in fase di esecuzione. Per altre informazioni sull'esecuzione di contenitori basati su attività, vedere Eseguire attività in contenitori con criteri di riavvio.