すべてのプロダクト
Search
ドキュメントセンター

Container Registry:オンプレミスのデバイスでマルチアーチイメージをビルドし、Container Registry Enterprise Editionインスタンスにプッシュする

最終更新日:Dec 13, 2024

Armアーキテクチャでコンテナーを展開すると、展開コストを節約できます。 ただし、x86アーキテクチャとArmアーキテクチャに異なるイメージを作成し、異なるイメージタグを設定する必要がある場合があります。 これにより、メンテナンスコストが増加します。 docker buildxコマンドを実行してマルチアーチイメージをビルドし、docker manifestコマンドを実行してマルチアーチイメージを1つのタグに基づいて管理できます。

前提条件

Dockerfileからマルチアーチ画像を作成する

  1. この例では、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"]
  2. Java Mavenプロジェクトがあるディレクトリでローカルターミナルを開き、次のコマンドを実行します。

    1. 次のコマンドを実行して、docker buildxのProvenance attestationsオプションを無効にします。

      export BUILDX_NO_DEFAULT_ATTESTATIONS=1
    2. 次のコマンドを実行して、マルチアーチ画像を作成します。

      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つの単一アーチ画像があり、単一アーチ画像に基づいて複数アーチ画像を作成するとします。

  1. 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
  2. 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
  3. docker manifest pushを実行して、マニフェストリストをContainer Registry Enterprise Editionインスタンスにプッシュします。

    docker manifest push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:multi

関連ドキュメント

Container Registryコンソールでマルチアーチイメージ構築タスクを構成および実行することもできます。 詳細については、「複数のアーキテクチャのコンテナーイメージの構築」をご参照ください。