Azure Container Registry のマルチアーキテクチャ イメージ
この記事では、マルチアーキテクチャ (multi-arch) イメージと、Azure Container Registry の機能を使用して、それらを作成、格納、使用する方法について説明します。
マルチアーキテクチャ イメージは、さまざまなアーキテクチャおよび場合によってはさまざまなオペレーティング システムのバリアントを組み合わせることができるコンテナー イメージの一種です。 マルチアーキテクチャをサポートするイメージを実行すると、コンテナー クライアントによって、OS とアーキテクチャに一致するイメージ バリアントが自動的に選択されます。
マニフェストとマニフェスト一覧
マルチアーキテクチャ イメージは、イメージ マニフェストとマニフェスト一覧に基づいています。
Manifest
各コンテナーイメージは、マニフェストによって表されます。 マニフェストは、イメージを一意に識別する JSON ファイルで、そのレイヤーとそれらに対応するサイズを参照します。
Linux hello-world
イメージの基本のマニフェストは、次のようになります。
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1510,
"digest": "sha256:fbf289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 977,
"digest": "sha256:2c930d010525941c1d56ec53b97bd057a67ae1865eebf042686d2a2d18271ced"
}
]
}
Azure Container Registry のマニフェストを表示するには、Azure portal または Azure CLI の az acr manifest list-metadata コマンドなどのツールを使用します。
マニフェスト一覧
マルチアーキテクチャ イメージの マニフェスト一覧 (より一般的には、OCI イメージの場合に、イメージ インデックスと呼ばれる) はイメージのコレクション (インデックス) であり、それを作成するには、1 つまたは複数のイメージ名を指定します。 これには、サポートされている OS およびアーキテクチャ、サイズ、マニフェスト ダイジェストなどの各イメージの詳細が含まれます。 マニフェスト一覧は、docker pull
コマンドと docker run
コマンドでイメージ名と同じように使用できます。
docker
CLI では、docker manifest コマンドを使用して、マニフェストとマニフェスト一覧を管理します。
Note
現時点で、docker manifest
コマンドとサブコマンドは試験段階です。 試験段階のコマンドの使用の詳細については、Docker のドキュメントを参照してください。
マニフェスト一覧を表示するには、docker manifest inspect
コマンドを使用します。 マルチアーキテクチャ イメージ mcr.microsoft.com/mcr/hello-world:latest
の出力を次に示します。これには、Linux OS アーキテクチャ用に 2 つ、および Windows アーキテクチャ用に 1 つの 3 つのマニフェストがあります。
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 524,
"digest": "sha256:83c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 525,
"digest": "sha256:873612c5503f3f1674f315c67089dee577d8cc6afc18565e0b4183ae355fb343",
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1124,
"digest": "sha256:b791ad98d505abb8c9618868fc43c74aa94d08f1d7afe37d19647c0030905cae",
"platform": {
"architecture": "amd64",
"os": "windows",
"os.version": "10.0.17763.1697"
}
}
]
}
マルチアーキテクチャ マニフェスト一覧が Azure Container Registry に格納されている場合、Azure portal または az acr manifest list-metadata コマンドなどのツールを使用して、マニフェスト一覧を表示することもできます。
マルチアーキテクチャ イメージのインポート
既存のマルチアーキテクチャ イメージを Azure Container Registry にインポートするには、az acr import コマンドを使用します。 イメージのインポートの構文は、単一アーキテクチャ イメージの場合と同じです。 単一アーキテクチャ イメージのインポートと同様に、マルチアーキテクチャ イメージのインポートでは、Docker コマンドを使用しません。
詳細については、「コンテナー レジストリにコンテナー イメージをインポートする」を参照してください。
マルチアーキテクチャ イメージのプッシュ
さまざまなアーキテクチャのコンテナー イメージを作成するワークフローを構築している場合は、次の手順に従って、マルチアーキテクチャ イメージを Azure Container Registry にプッシュします。
各アーキテクチャ固有のイメージにタグを付けて、コンテナー レジストリにプッシュします。 次の例では、2 つの Linux アーキテクチャ (arm64 と amd64) を想定しています。
docker tag myimage:arm64 \ myregistry.azurecr.io/multi-arch-samples/myimage:arm64 docker push myregistry.azurecr.io/multi-arch-samples/myimage:arm64 docker tag myimage:amd64 \ myregistry.azurecr.io/multi-arch-samples/myimage:amd64 docker push myregistry.azurecr.io/multi-arch-samples/myimage:amd64
docker manifest create
を実行して、マニフェスト一覧を作成し、前のイメージをマルチアーキテクチャ イメージに結合します。docker manifest create myregistry.azurecr.io/multi-arch-samples/myimage:multi \ myregistry.azurecr.io/multi-arch-samples/myimage:arm64 \ myregistry.azurecr.io/multi-arch-samples/myimage:amd64
docker manifest push
を使用して、コンテナー レジストリにマニフェストをプッシュします。docker manifest push myregistry.azurecr.io/multi-arch-samples/myimage:multi
docker manifest inspect
コマンドを使用して、マニフェスト一覧を表示します。 コマンド出力の例は、前のセクションに示しています。
マルチアーキテクチャ マニフェストをレジストリにプッシュしたら、単一アーキテクチャ イメージを処理する同じ方法で、マルチアーキテクチャ イメージを操作します。 たとえば、docker pull
を使用してイメージをプルし、az acr repository コマンドを使用して、イメージのタグ、マニフェスト、その他のプロパティを表示します。
マルチアーキテクチャ イメージの構築とプッシュ
ACR タスクの機能を使用すると、マルチアーキテクチャ イメージを構築して、Azure Container Registry にプッシュできます。 たとえば、Linux マルチアーキテクチャ イメージを構築する複数ステップ タスクを YAML ファイルに定義します。
次の例では、2 つのアーキテクチャ (arm64 と amd64) 用の個別の Dockerfile があることを前提としています。 これは、アーキテクチャ固有のイメージを構築してプッシュし、次に latest
タグがあるマルチアーキテクチャ マニフェストを作成してプッシュします。
version: v1.1.0
steps:
- build: -t {{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-amd64 -f dockerfile.arm64 .
- build: -t {{.Run.Registry}}/multi-arch-samples/myyimage:{{.Run.ID}}-arm64 -f dockerfile.amd64 .
- push:
- {{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-arm64
- {{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-amd64
- cmd: >
docker manifest create
{{.Run.Registry}}/multi-arch-samples/myimage:latest
{{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-arm64
{{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-amd64
- cmd: docker manifest push --purge {{.Run.Registry}}/multi-arch-samples/myimage:latest
- cmd: docker manifest inspect {{.Run.Registry}}/multi-arch-samples/myimage:latest
次のステップ
- Azure Pipelines を使用して、さまざまなアーキテクチャのコンテナー イメージを構築します。
- 試験段階の Docker buildx プラグインを使用したマルチプラットフォーム イメージの構築について確認します。