Ustawianie zmiennych środowiskowych w wystąpieniach kontenerów

Ustawienie zmiennych środowiskowych w wystąpieniach kontenerów umożliwia udostępnienie dynamicznej konfiguracji aplikacji lub skryptu uruchamianego przez kontener. Jest to podobne do argumentu --env wiersza polecenia do docker run.

Aby ustawić zmienne środowiskowe w kontenerze, określ je podczas tworzenia wystąpienia kontenera. W tym artykule przedstawiono przykłady ustawiania zmiennych środowiskowych podczas uruchamiania kontenera przy użyciu interfejsu wiersza polecenia platformy Azure, Azure PowerShell i Azure Portal.

Jeśli na przykład uruchomisz obraz kontenera microsoft aci-wordcount , możesz zmodyfikować jego zachowanie, określając następujące zmienne środowiskowe:

NumWords: liczba słów wysłanych do STDOUT.

MinLength: minimalna liczba znaków w słowie, która ma zostać zliczona. Wyższa liczba ignoruje typowe słowa, takie jak "of" i "the".

Jeśli musisz przekazać wpisy tajne jako zmienne środowiskowe, Azure Container Instances obsługuje bezpieczne wartości zarówno dla kontenerów systemu Windows, jak i Linux.

Uwaga

Zalecamy korzystanie z modułu Azure Az programu PowerShell do interakcji z platformą Azure. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Przykład interfejsu wiersza polecenia platformy Azure

Aby wyświetlić domyślne dane wyjściowe kontenera aci-wordcount , uruchom go najpierw za pomocą tego polecenia az container create (bez określonych zmiennych środowiskowych):

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

Aby zmodyfikować dane wyjściowe, uruchom drugi kontener z --environment-variables dodanym argumentem, określając wartości zmiennych NumWords i MinLength . (W tym przykładzie założono, że używasz interfejsu wiersza polecenia w powłoce powłoki Bash lub w usłudze Azure Cloud Shell. Jeśli używasz wiersza polecenia systemu Windows, określ zmienne z podwójnymi cudzysłowami, takimi jak --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'

Po wyświetleniu stanu obu kontenerów jako Zakończone (użyj polecenia az container show , aby sprawdzić stan), wyświetl dzienniki za pomocą polecenia az container logs , aby wyświetlić dane wyjściowe.

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

Dane wyjściowe kontenerów pokazują, jak zmodyfikowano zachowanie skryptu drugiego kontenera, ustawiając zmienne środowiskowe.

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

przykład Azure PowerShell

Ustawienie zmiennych środowiskowych w programie PowerShell jest podobne do interfejsu wiersza polecenia, ale używa argumentu -EnvironmentVariable wiersza polecenia.

Najpierw uruchom kontener aci-wordcount w domyślnej konfiguracji za pomocą tego polecenia New-AzContainerGroup :

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

Teraz uruchom następujące polecenie New-AzContainerGroup . Ten element określa zmienne środowiskowe NumWords i MinLength po wypełnieniu zmiennej tablicy: 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
    )

Po zakończeniu działania obu kontenerów (użyj polecenia Get-AzContainerInstanceLog , aby sprawdzić stan), pobierz dzienniki za pomocą polecenia Get-AzContainerInstanceLog .

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

Dane wyjściowe dla każdego kontenera pokazują, jak został zmodyfikowany skrypt uruchamiany przez kontener, ustawiając zmienne środowiskowe.

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

przykład Azure Portal

Aby ustawić zmienne środowiskowe podczas uruchamiania kontenera w Azure Portal, określ je na stronie Zaawansowane podczas tworzenia kontenera.

  1. Na stronie Zaawansowane ustaw zasady ponownego uruchamiania na Wartość W przypadku niepowodzenia
  2. W obszarze Zmienne środowiskowe wprowadź NumWords wartość dla 5 pierwszej zmiennej i wprowadź MinLength wartość z wartością 8 dla drugiej zmiennej.
  3. Wybierz pozycję Przejrzyj i utwórz , aby zweryfikować, a następnie wdrożyć kontener.

Strona portalu przedstawiająca zmienną środowiskową Włącz przycisk i pola tekstowe

Aby wyświetlić dzienniki kontenera, w obszarze Ustawienia wybierz pozycję Kontenery, a następnie pozycję Dzienniki. Podobnie jak w poprzednich sekcjach interfejsu wiersza polecenia i programu PowerShell, możesz zobaczyć, jak zachowanie skryptu zostało zmodyfikowane przez zmienne środowiskowe. Wyświetlane są tylko pięć słów, z których każda ma minimalną długość ośmiu znaków.

Portal przedstawiający dane wyjściowe dziennika kontenera

Bezpieczne wartości

Obiekty z bezpiecznymi wartościami są przeznaczone do przechowywania poufnych informacji, takich jak hasła lub klucze aplikacji. Używanie bezpiecznych wartości zmiennych środowiskowych jest bezpieczniejsze i bardziej elastyczne niż uwzględnianie ich na obrazie kontenera. Inną opcją jest użycie woluminów tajnych opisanych w temacie Instalowanie woluminu tajnego w Azure Container Instances.

Zmienne środowiskowe z bezpiecznymi wartościami nie są widoczne we właściwościach kontenera — do ich wartości można uzyskać dostęp tylko z poziomu kontenera. Na przykład właściwości kontenera wyświetlane w Azure Portal lub interfejsie wiersza polecenia platformy Azure wyświetlają tylko nazwę bezpiecznej zmiennej, a nie jej wartość.

Ustaw bezpieczną zmienną środowiskową, określając secureValue właściwość zamiast zwykłej value dla typu zmiennej. Dwie zmienne zdefiniowane w poniższym języku YAML przedstawiają dwa typy zmiennych.

Wdrożenie YAML

secure-env.yaml Utwórz plik z następującym fragmentem kodu.

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

Uruchom następujące polecenie, aby wdrożyć grupę kontenerów przy użyciu języka YAML (dostosuj nazwę grupy zasobów zgodnie z potrzebami):

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

Weryfikowanie zmiennych środowiskowych

Uruchom polecenie az container show , aby wykonać zapytanie o zmienne środowiskowe kontenera:

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

Odpowiedź JSON pokazuje zarówno niezabezpieczony klucz i wartość zmiennej środowiskowej, ale tylko nazwę bezpiecznej zmiennej środowiskowej:

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

Za pomocą polecenia az container exec , które umożliwia wykonywanie polecenia w uruchomionym kontenerze, możesz sprawdzić, czy ustawiono bezpieczną zmienną środowiskową. Uruchom następujące polecenie, aby uruchomić interaktywną sesję powłoki bash w kontenerze:

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

Po otwarciu interaktywnej powłoki w kontenerze możesz uzyskać dostęp do wartości zmiennej SECRET :

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

Następne kroki

Scenariusze oparte na zadaniach, takie jak przetwarzanie wsadowe dużego zestawu danych z kilkoma kontenerami, mogą korzystać z niestandardowych zmiennych środowiskowych w czasie wykonywania. Aby uzyskać więcej informacji na temat uruchamiania kontenerów opartych na zadaniach, zobacz Uruchamianie konteneryzowanych zadań przy użyciu zasad ponownego uruchamiania.