次の方法で共有


コンテナー グループでのセットアップ タスクのために init コンテナーを実行する

Azure Container Instances では、コンテナー グループ内の "init コンテナー" がサポートされます。 init コンテナーは、アプリケーション コンテナーが開始される前に、完了するまで実行されます。 Kubernetes init コンテナーと同様に、1 つ以上の init コンテナーを使用して、アカウントの設定、セットアップ スクリプトの実行、またはデータベースの構成など、アプリ コンテナーの初期化ロジックを実行します。

この記事では、Azure Resource Manager テンプレートを使用して、init コンテナーを含むコンテナー グループを構成する方法について説明します。

注意事項

  • API バージョン - init コンテナーをデプロイするには、少なくとも Azure Container Instances API バージョン 2019-12-01 が必要です。 YAML ファイルまたは Resource Manager テンプレートinitContainers プロパティを使用してデプロイします。

  • 実行順序 - init コンテナーは、テンプレートに指定された順序で、他のコンテナーの前に実行されます。 既定では、1 つのコンテナー グループあたり最大で 59 個の init コンテナーを指定できます。 グループには、init 以外のコンテナーが少なくとも 1 つ含まれている必要があります。

  • ホスト環境 - init コンテナーは、グループ内の残りのコンテナーと同じハードウェア上で実行されます。

  • リソース - init コンテナーのリソースは指定しません。 コンテナー グループで使用可能な CPU やメモリなどの合計リソースが付与されます。 init コンテナーが実行されている間、グループ内の他のコンテナーは実行されません。

  • サポートされているプロパティ - init コンテナーは、ボリューム、シークレットなどのグループ プロパティを使用できます。 ただし、コンテナー グループに対して構成されている場合、ポート、IP アドレス、マネージド ID を使用することはできません。

  • 再起動ポリシー - 各 init コンテナーは、グループ内の次のコンテナーが開始される前に正常に終了する必要があります。 init コンテナーが正常に終了しない場合、その再起動アクションは、グループに対して構成されている再起動ポリシーによって決まります。

    グループ内のポリシー init 内のポリシー
    Always (常に) OnFailure
    OnFailure OnFailure
    なし なし
  • 料金 - コンテナー グループでは、init コンテナーの最初のデプロイから料金が発生します。

Resource Manager テンプレートの例

まず、次の JSON を azuredeploy.json という名前の新しいファイルにコピーします。 このテンプレートは、1 つの init コンテナーと 2 つのアプリケーション コンテナーを含むコンテナー グループを設定します。

  • init1 コンテナーでは、busybox イメージが実行されます。 60 秒間スリープ状態になってから、emptyDir ボリューム内のファイルにコマンドライン文字列を書き込みます。
  • どちらのアプリケーション コンテナーでも、Microsoft の aci-wordcount コンテナー イメージが実行されます。
    • hamlet コンテナーは、既定の構成でワードカウント アプリを実行し、シェイクスピアの戯曲 "ハムレット" での単語の頻度をカウントします。
    • juliet アプリ コンテナーは、emptDir ボリュームからコマンドライン文字列を読み取って、代わりにシェイクスピアの "ロミオとジュリエット" でワードカウント アプリを実行します。

aci-wordcount イメージの使用の詳細と例については、「コンテナー インスタンスで環境変数を設定する」を参照してください。

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "containerGroupName": {
        "type": "string",
        "defaultValue": "myContainerGroup",
        "metadata": {
          "description": "Container Group name."
        }
      }
    },
    "resources": [
        {
            "name": "[parameters('containerGroupName')]",
            "type": "Microsoft.ContainerInstance/containerGroups",
            "apiVersion": "2019-12-01",
            "location": "[resourceGroup().location]",
            "properties": {
                "sku": "Standard",
                "initContainers": [
                {
                    "name": "init1",
                    "properties": {
                        "image": "mcr.microsoft.com/aks/e2e/library-busybox:master.210714.1",
                        "environmentVariables": [],
                        "volumeMounts": [
                            {
                                "name": "emptydir1",
                                "mountPath": "/mnt/emptydir"
                            }
                        ],
                         "command": [
                            "/bin/sh",
                            "-c",
                            "sleep 60; echo python wordcount.py http://shakespeare.mit.edu/romeo_juliet/full.html > /mnt/emptydir/command_line.txt"
                        ]
                    }
                }
            ], 
                "containers": [
                    {
                        "name": "hamlet",
                        "properties": {
                            "image": "mcr.microsoft.com/azuredocs/aci-wordcount",
                            "volumeMounts": [
                            {
                                "name": "emptydir1",
                                "mountPath": "/mnt/emptydir"
                            }
                        ],
                            "environmentVariables": [
                             {
                                "name": "NumWords",
                                "value": "3"
                             },
                             {  "name": "MinLength",
                                "value": "5"
                             }
                            ],
                            "resources": {
                                "requests": {
                                    "memoryInGB": 1.0,
                                    "cpu": 1
                                }
                            }
                        }
                    },
                    {
                        "name": "juliet",
                        "properties": {
                            "image": "mcr.microsoft.com/azuredocs/aci-wordcount",
                            "volumeMounts": [
                            {
                                "name": "emptydir1",
                                "mountPath": "/mnt/emptydir"
                            }
                            ],
                            "command": [
                                "/bin/sh",
                                "-c",
                                "$(cat /mnt/emptydir/command_line.txt)"
                            ],
                            "environmentVariables": [
                             {
                                "name": "NumWords",
                                "value": "3"
                             },
                             {  "name": "MinLength",
                                "value": "5"
                             }
                            ],
                            "resources": {
                                "requests": {
                                    "memoryInGB": 1.0,
                                    "cpu": 1
                                }
                            }
                        }
                    }
                ],
                "restartPolicy": "OnFailure",
                "osType": "Linux",
                "volumes": [
                    {
                        "name": "emptydir1",
                        "emptyDir": {}
                    }
                ]           
            },
            "tags": {}
        }
    ]
}

テンプレートのデプロイ

az group create コマンドを使用して、リソース グループを作成します。

az group create --name myResourceGroup --location eastus

az deployment group create コマンドを使用してテンプレートをデプロイします。

az deployment group create \
  --resource-group myResourceGroup \
  --template-file azuredeploy.json

init コンテナーを含むグループでは、init コンテナーが完了するまでに要する時間が原因で、デプロイ時間が増加します。

コンテナー ログの表示

init コンテナーが正常に実行されたことを確認するには、az container logs コマンドを使用して、アプリ コンテナーのログ出力を表示します。 --container-name 引数は、プルするログが含まれるコンテナーを指定します。 この例では、異なるコマンド出力を表示する hamletjuliet コンテナーのログをプルします。

az container logs \
  --resource-group myResourceGroup \
  --name myContainerGroup \
  --container-name hamlet

出力:

[('HAMLET', 386), ('HORATIO', 127), ('CLAUDIUS', 120)]
az container logs \
  --resource-group myResourceGroup \
  --name myContainerGroup \
  --container-name juliet

出力:

[('ROMEO', 177), ('JULIET', 134), ('CAPULET', 119)]

次のステップ

init コンテナーは、アプリケーション コンテナーのセットアップと初期化タスクの実行に役立ちます。 タスク ベースのコンテナーの実行に関する詳細については、「再起動ポリシーによるコンテナー化タスクの実行」を参照してください。

Azure Container Instances には、アプリケーション コンテナーの動作を変更するための他のオプションが用意されています。 たとえば、次のようになります。