Armアーキテクチャでコンテナーを展開すると、展開コストを節約できます。 ただし、x86アーキテクチャとArmアーキテクチャに異なるイメージを作成し、異なるイメージタグを設定する必要がある場合があります。 これにより、メンテナンスコストが増加します。 docker buildx
コマンドを実行してマルチアーチイメージをビルドし、docker manifest
コマンドを実行してマルチアーチイメージを1つのタグに基づいて管理できます。
前提条件
Container Registry Enterprise Editionインスタンスが作成されました。 詳細については、「Container Registry Enterprise Editionインスタンスの作成」をご参照ください。
オンプレミスのデバイスにDockerクライアントがインストールされています。 詳細については、「Dockerのインストール」をご参照ください。
Dockerfileからマルチアーチ画像を作成する
この例では、Java Mavenプロジェクトが使用されています。 Java MavenプロジェクトでDockerfileを作成し、次の内容をDockerfileに追加します。
#First stage: complete build environment FROM maven:3.5.0-jdk-8-alpine AS builder # add pom.xml and source code ADD ./pom.xml pom.xml ADD ./src src/ # package jar RUN mvn clean package # Second stage: minimal runtime environment From openjdk:8-jre-alpine # copy jar from the first stage COPY --from=builder target/my-app-1.0-SNAPSHOT.jar my-app-1.0-SNAPSHOT.jar EXPOSE 8080 CMD ["java", "-jar", "my-app-1.0-SNAPSHOT.jar"]
Java Mavenプロジェクトがあるディレクトリでローカルターミナルを開き、次のコマンドを実行します。
次のコマンドを実行して、docker buildxのProvenance attestationsオプションを無効にします。
export BUILDX_NO_DEFAULT_ATTESTATIONS=1
次のコマンドを実行して、マルチアーチ画像を作成します。
docker buildx build . -t acr-test-registry.cn-hangzhou.cr.aliyuncs.com/test/test:multi --platform linux/amd64,linux/arm64 --push
コマンドを実行すると、Amd64およびArm64アーキテクチャのコンテナイメージがオンプレミスデバイス上に構築され、イメージリポジトリにプッシュされます。
説明docker pushコマンドを実行してイメージをイメージリポジトリにプッシュする前に、docker loginコマンドを実行してイメージリポジトリにログインする必要があります。 docker loginコマンドの例:
docker login -- username=xx x acr-test-registry.cn-hangzhou.cr.aliyuncs.com
既存の画像からマルチアーチ画像を作成
この例では、2つの単一アーチ画像があり、単一アーチ画像に基づいて複数アーチ画像を作成するとします。
docker tag
コマンドを実行してuni-archイメージに再度タグ付けし、uni-archイメージをContainer Registry Enterprise Editionインスタンスにプッシュします。 たとえば、ユニアーチイメージがArm64 NGINXイメージとAMD64 NGINXイメージの場合、次のコマンドを実行します。docker tag nginx:arm64 acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64 docker push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64 docker tag nginx:amd64 acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64 docker push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64
docker manifest create
コマンドを実行してマニフェストリストを作成し、手順1のイメージをマルチアーチイメージにマージします。docker manifest create acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:multi \ acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64 \ acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64
docker manifest push
を実行して、マニフェストリストをContainer Registry Enterprise Editionインスタンスにプッシュします。docker manifest push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:multi
関連ドキュメント
Container Registryコンソールでマルチアーチイメージ構築タスクを構成および実行することもできます。 詳細については、「複数のアーキテクチャのコンテナーイメージの構築」をご参照ください。