Azure Container Instances に gitRepo ボリュームをマウントする

gitRepo ボリュームをマウントし、Git リポジトリの複製をコンテナー インスタンスに作成する方法について説明します。

Note

gitRepo ボリュームのマウントは現在、Linux コンテナーに限定されています。 Microsoft ではすべての機能を Windows コンテナーに取り入れるように取り組んでいますが、現在のプラットフォームの違いは、概要に関するページで確認できます。

gitRepo ボリューム

gitRepo ボリュームはディレクトリをマウントし、コンテナーの起動時、指定の Git リポジトリの複製をそのディレクトリに作成します。 コンテナー インスタンスで gitRepo ボリュームを使用することで、そのためのコードを自分のアプリケーションに追加する必要がなくなります。

gitRepo ボリュームをマウントするとき、次の 3 つのプロパティを設定し、ボリュームを構成できます。

プロパティ 必須 説明
repository はい 完全 URL。複製を作成する Git リポジトリの http:// または https:// も含まれます。
directory いいえ リポジトリの複製を作成するディレクトリ。 パスには ".." を含めることができません。 "." を指定すると、リポジトリの複製がボリュームのディレクトリに作成されます。 指定しない場合、ボリューム ディレクトリ内の指定の下位ディレクトリに Git リポジトリの複製が作成されます。
revision いいえ 複製を作成するリビジョンのコミット ハッシュ。 指定しない場合、HEAD リビジョンが複製されます。

gitRepo ボリュームのマウント:Azure CLI

Azure CLI を使用してコンテナー インスタンスをデプロイするときに gitRepo ボリュームをマウントするには、az container create コマンドに --gitrepo-url および --gitrepo-mount-path パラメーターを指定します。 必要に応じて、複製先となるボリューム内のディレクトリ (--gitrepo-dir) と複製されるリビジョンのコミット ハッシュ (--gitrepo-revision) を指定することもできます。

この例のコマンドでは、Microsoft aci-helloworld サンプル アプリケーションがコンテナー インスタンス内の /mnt/aci-helloworld に複製されます。

az container create \
    --resource-group myResourceGroup \
    --name hellogitrepo \
    --image mcr.microsoft.com/azuredocs/aci-helloworld \
    --dns-name-label aci-demo \
    --ports 80 \
    --gitrepo-url https://github.com/Azure-Samples/aci-helloworld \
    --gitrepo-mount-path /mnt/aci-helloworld

gitRepo ボリュームがマウントされたことを確認するには、az container exec を使ってコンテナー内のシェルを起動し、ディレクトリを一覧表示します。

az container exec --resource-group myResourceGroup --name hellogitrepo --exec-command /bin/sh
/usr/src/app # ls -l /mnt/aci-helloworld/
total 16
-rw-r--r--    1 root     root           144 Apr 16 16:35 Dockerfile
-rw-r--r--    1 root     root          1162 Apr 16 16:35 LICENSE
-rw-r--r--    1 root     root          1237 Apr 16 16:35 README.md
drwxr-xr-x    2 root     root          4096 Apr 16 16:35 app

gitRepo ボリュームのマウント:リソース マネージャー

Azure Resource Manager テンプレートを使ってコンテナー インスタンスをデプロイするときに gitRepo ボリュームをマウントするには、最初にテンプレートのコンテナー グループの properties セクションにある volumes 配列を設定します。 次に、gitRepo ボリュームをマウントするコンテナー グループ内の各コンテナーに対して、コンテナー定義の properties セクションで volumeMounts 配列を設定します。

たとえば、次の Resource Manager テンプレートでは、1 つのコンテナーから構成されるコンテナー グループが作成されます。 このコンテナーによって、gitRepo ボリューム ブロックにより指定される 2 つの GitHub リポジトリが複製されます。 2 つ目のボリュームには、複製先のディレクトリを指定する追加プロパティと複製する特定のリビジョンのコミット ハッシュが含まれています。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "container1name": "aci-tutorial-app",
    "container1image": "microsoft/aci-helloworld:latest"
  },
  "resources": [
    {
      "type": "Microsoft.ContainerInstance/containerGroups",
      "apiVersion": "2021-03-01",
      "name": "volume-demo-gitrepo",
      "location": "[resourceGroup().location]",
      "properties": {
        "containers": [
          {
            "name": "[variables('container1name')]",
            "properties": {
              "image": "[variables('container1image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              },
              "ports": [
                {
                  "port": 80
                }
              ],
              "volumeMounts": [
                {
                  "name": "gitrepo1",
                  "mountPath": "/mnt/repo1"
                },
                {
                  "name": "gitrepo2",
                  "mountPath": "/mnt/repo2"
                }
              ]
            }
          }
        ],
        "osType": "Linux",
        "ipAddress": {
          "type": "Public",
          "ports": [
            {
              "protocol": "tcp",
              "port": "80"
            }
          ]
        },
        "volumes": [
          {
            "name": "gitrepo1",
            "gitRepo": {
              "repository": "https://github.com/Azure-Samples/aci-helloworld"
            }
          },
          {
            "name": "gitrepo2",
            "gitRepo": {
              "directory": "my-custom-clone-directory",
              "repository": "https://github.com/Azure-Samples/aci-helloworld",
              "revision": "d5ccfcedc0d81f7ca5e3dbe6e5a7705b579101f1"
            }
          }
        ]
      }
    }
  ]
}

先のテンプレートに定義されていた 2 つの複製リポジトリのディレクトリ構造は結果的に次のようになります。

/mnt/repo1/aci-helloworld
/mnt/repo2/my-custom-clone-directory

Azure Resource Manager テンプレートによるコンテナー インスタンスのデプロイ例を見るには、Azure Container Instances での複数コンテナーのデプロイに関するページを参照してください。

プライベート Git リポジトリの認証

プライベート Git リポジトリ用の gitRepo ボリュームをマウントするには、リポジトリの URL に資格情報を指定します。 通常、資格情報は、範囲が指定されたアクセスをリポジトリに付与するユーザー名と個人用アクセス トークン (PAT) の形式です。

たとえば、プライベート GitHub リポジトリの Azure CLI --gitrepo-url パラメーターは、次のようになります ("gituser" は GitHub のユーザー名であり、"abcdef1234fdsa4321abcdef" はユーザーの個人用アクセス トークンです)。

--gitrepo-url https://gituser:abcdef1234fdsa4321abcdef@github.com/GitUser/some-private-repository

Azure Repos Git リポジトリの場合、有効な PAT と組み合わせて任意のユーザー名を指定します (次の例のように "azurereposuser" を使用できます)。

--gitrepo-url https://azurereposuser:abcdef1234fdsa4321abcdef@dev.azure.com/your-org/_git/some-private-repository

GitHub と Azure Repos の個人用アクセス トークンの詳細については、以下を参照してください。

GitHub:コマンド ラインに使用する個人用アクセス トークンを作成する

Azure Repos:アクセスの認証に使用する個人用アクセス トークンを作成する

次のステップ

Azure Container Instances にその他の種類のボリュームをマウントする方法について学習してください。