Nastavení proměnných prostředí v instancích kontejnerů

Když v instancích kontejnerů nastavíte proměnné prostředí, můžete dynamicky konfigurovat aplikaci nebo skript, které kontejner spustí. To se podobá --env argumentu příkazového řádku jako docker run .

Pokud chcete nastavit proměnné prostředí v kontejneru, zadejte je při vytváření instance kontejneru. Tento článek ukazuje příklady nastavení proměnných prostředí při spuštění kontejneru pomocí Azure CLI, Azure PowerShella Azure Portal.

Pokud například spustíte image kontejneru Microsoft aci-wordcount, můžete její chování upravit zadáním následujících proměnných prostředí:

NumWords: Počet slov odeslaných do STDOUT.

MinLength: Minimální počet znaků ve slově, které se má spočítat. Vyšší číslo ignoruje běžná slova jako "of" a "the".

Pokud potřebujete tajné kódy předat jako proměnné prostředí, Azure Container Instances hodnoty pro kontejnery Windows i Linuxu.

Poznámka

Tento článek používá modul Azure Az PowerShell, což je doporučený modul PowerShellu pro interakci s Azure. Pokud chcete začít s modulem Az PowerShell, projděte si téma věnované instalaci Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.

Příklad Azure CLI

Pokud chcete zobrazit výchozí výstup kontejneru aci-wordcount, spusťte ho nejprve pomocí tohoto příkazu az container create (nejsou zadané žádné proměnné prostředí):

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

Pokud chcete upravit výstup, spusťte druhý kontejner s přidaným argumentem a zadejte hodnoty pro proměnné --environment-variables NumWords a MinLength. (Tento příklad předpokládá, že používáte rozhraní příkazového řádku v prostředí Bash nebo Azure Cloud Shell. Pokud používáte příkazový Windows příkazového řádku, zadejte proměnné pomocí dvojitých uvozovek, například --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'

Jakmile se stav obou kontejnerů zobrazí jako Ukončeno (pomocí příkazu az container show zkontrolujte stav), zobrazte jejich protokoly pomocí příkazu az container logs a zobrazte výstup.

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

Výstup kontejnerů ukazuje, jak jste upravili chování skriptu druhého kontejneru nastavením proměnných prostředí.

mycontainer1

[('the', 990),
 ('and', 702),
 ('of', 628),
 ('to', 610),
 ('I', 544),
 ('you', 495),
 ('a', 453),
 ('my', 441),
 ('in', 399),
 ('HAMLET', 386)]

kontejner mycontainer2

[('CLAUDIUS', 120),
 ('POLONIUS', 113),
 ('GERTRUDE', 82),
 ('ROSENCRANTZ', 69),
 ('GUILDENSTERN', 54)]

Azure PowerShell příkladu

Nastavení proměnných prostředí v PowerShellu se podobá rozhraní příkazového řádku, ale používá -EnvironmentVariable argument příkazového řádku.

Nejprve spusťte kontejner aci-wordcount ve výchozí konfiguraci pomocí tohoto příkazu New-AzContainerGroup:

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

Teď spusťte následující příkaz New-AzContainerGroup. Tento parametr určuje proměnné prostředí NumWords a MinLength po naplnění proměnné pole envVars :

$envVars = @{'NumWords'='5';'MinLength'='8'}
New-AzContainerGroup `
    -ResourceGroupName myResourceGroup `
    -Name mycontainer2 `
    -Image mcr.microsoft.com/azuredocs/aci-wordcount:latest `
    -RestartPolicy OnFailure `
    -EnvironmentVariable $envVars

Jakmile se stav obou kontejnerů ukončí (pomocí příkazu Get-AzContainerInstanceLog zkontrolujte stav), stáhněte si protokoly pomocí příkazu Get-AzContainerInstanceLog.

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

Výstup každého kontejneru ukazuje, jak jste upravili skript spuštěný kontejnerem nastavením proměnných prostředí.

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 Portal příkladu

Pokud chcete nastavit proměnné prostředí při spuštění kontejneru v Azure Portal, zadejte je při vytváření kontejneru na stránce Upřesnit.

  1. Na stránce Upřesnit nastavte zásadu restartování na Při selhání.
  2. V části Proměnné prostředí zadejte jako první proměnnou hodnotu a jako druhou NumWords 5 MinLength 8 proměnnou zadejte hodnotu .
  3. Vyberte Zkontrolovat a vytvořit a ověřte a pak nasaďte kontejner.

Stránka portálu zobrazující proměnnou prostředí Povolit tlačítko a textová pole

Pokud chcete zobrazit protokoly kontejneru, v části Nastavení Kontejnery a pak Protokoly. Podobně jako výstup zobrazený v předchozích částech ROZHRANÍ příkazového řádku a PowerShellu můžete vidět, jak proměnné prostředí změnily chování skriptu. Zobrazí se jenom pět slov, z nichž každé má minimální délku osm znaků.

Portál zobrazující výstup protokolu kontejneru

Zabezpečené hodnoty

Objekty se zabezpečenými hodnotami jsou určené k tomu, aby uchovály citlivé informace, jako jsou hesla nebo klíče pro vaši aplikaci. Použití zabezpečených hodnot pro proměnné prostředí je bezpečnější a flexibilnější než jejich zahrnutí do image kontejneru. Další možností je použít tajné svazky, které jsou popsané v článku Připojení tajného svazku v Azure Container Instances.

Proměnné prostředí se zabezpečenými hodnotami nejsou ve vlastnostech kontejneru viditelné – k jejich hodnotám lze přistupovat pouze z kontejneru. Například vlastnosti kontejneru zobrazované v Azure Portal nebo Azure CLI zobrazují pouze název zabezpečené proměnné, nikoli jeho hodnotu.

Nastavte zabezpečenou proměnnou prostředí tak, že pro typ proměnné zadáte vlastnost místo secureValue value běžné proměnné. Dvě proměnné definované v následujícím yaml ukazují dva typy proměnných.

Nasazení YAML

Vytvořte soubor secure-env.yaml s následujícím fragmentem kódu.

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

Spuštěním následujícího příkazu nasaďte skupinu kontejnerů pomocí YAML (podle potřeby upravte název skupiny prostředků):

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

Ověření proměnných prostředí

Spuštěním příkazu az container show zadejte dotaz na proměnné prostředí vašeho kontejneru:

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

V odpovědi JSON se zobrazuje klíč i hodnota nezabezpečené proměnné prostředí, ale pouze název zabezpečené proměnné prostředí:

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

Pomocí příkazu az container exec, který umožňuje spuštění příkazu ve spuštěném kontejneru, můžete ověřit, že je nastavená zabezpečená proměnná prostředí. Spuštěním následujícího příkazu spusťte interaktivní relaci Bashe v kontejneru:

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

Po otevření interaktivního prostředí v rámci kontejneru máte přístup k hodnotě SECRET proměnné:

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

Další kroky

Scénáře založené na úlohách, jako je dávkové zpracování velkých datových sad s několika kontejnery, těží z vlastních proměnných prostředí za běhu. Další informace o spouštění kontejnerů založených na úlohách najdete v tématu Spouštění kontejnerizovaných úloh se zásadami restartování.