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

Container Registry:マルチアーキテクチャコンテナイメージのビルド

最終更新日:Mar 27, 2026

Arm ベースのマシンにコンテナをデプロイする場合、x86 と Arm アーキテクチャで個別のイメージタグを維持すると、メンテナンスのオーバーヘッドが増加します。Container Registry Enterprise Edition を使用すると、単一のタグで複数の CPU アーキテクチャ向けのイメージをビルドできます。クライアントがイメージをプルすると、レジストリはクライアントのアーキテクチャに一致するバリアントを自動的に提供するため、アーキテクチャ固有のタグは不要です。

仕組み

マルチアーキテクチャイメージは、個々のイメージマニフェストとともにマニフェストリストを格納します。マニフェストリストの各エントリは、特定のアーキテクチャ向けにビルドされたイメージをポイントします。Docker や containerd がタグでイメージをプルすると、マニフェストリストを読み取り、ホストのアーキテクチャに一致するマニフェストのみをフェッチします。

これにより、同じ docker pull コマンドが amd64 サーバーと Arm ベースのマシンの両方で正しく動作します。

前提条件

開始する前に、次のものが揃っていることを確認してください:

サポート対象のアーキテクチャ

オペレーティングシステムアーキテクチャサポート
Linuxamd64はい (デフォルト)
Linuxarm64はい
Linuxarm/v7はい
Linuxarm/v6はい
Windowsamd64いいえ
現在、Windows イメージはサポートされていません。サポートされているすべてのアーキテクチャは Linux 上で実行されます。

単一のアーキテクチャを選択した場合、そのアーキテクチャ用にイメージがビルドされ、指定されたタグでプッシュされます。複数のアーキテクチャを選択した場合、アーキテクチャごとに個別のイメージがビルドされ、同じリポジトリに同じタグでプッシュされます。

ステップ 1:プロジェクトの作成

イメージをビルドする元のソースコードプロジェクトを作成します。次の Go ソースファイルと Dockerfile は、実行されるマシンのアーキテクチャを出力するバイナリを生成します。これは、正しいイメージバリアントがプルされたことを確認するのに役立ちます。

// hello.go として保存
package main

import (
    "fmt"
    "runtime"
)

func main() {
    fmt.Printf("Hello, %s!\n", runtime.GOARCH)
}
FROM golang:alpine AS builder
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN go build -o hello hello.go
FROM alpine
RUN mkdir /app
WORKDIR /app
COPY --from=builder /app/hello .
CMD ["./hello"]

この Dockerfile はマルチステージビルドを使用しています。golang:alpine ステージでバイナリをコンパイルし、最終的な alpine ステージで最小イメージを生成します。

ステップ 2:イメージリポジトリの作成

イメージリポジトリを作成し、ソースコードプロジェクトにバインドします。プロジェクトからトリガーされたすべてのイメージビルドは、このリポジトリにプッシュされます。

  1. Container Registry コンソールにログインします。

  2. Container Registry コンソールにログインします。

  3. トップナビゲーションバーで、リージョンを選択します。

  4. 左側のナビゲーションウィンドウで、[Instances] をクリックします。

  5. [Instances] ページで、管理する Enterprise Edition インスタンスをクリックします。

  6. 左側のナビゲーションウィンドウで、[Repository] > [Repositories] を選択します。

  7. [Repositories] ページで、[Create Repository] をクリックします。

  8. [リポジトリ情報] ステップで、[名前空間][リポジトリ名][リポジトリタイプ][タグ][イメージアクセラレーション][概要][説明] を設定します。その後、[次へ] をクリックします。

  9. コード ソース」ステップで、以下のパラメーターを設定し、「リポジトリの作成」をクリックします。「ビルド設定」オプション:

    パラメーター説明
    コードソースリポジトリにバインドするソースコードホスティングプラットフォーム。
    ビルド設定イメージのビルド方法を制御するオプション。下の表をご参照ください。
    ビルドルールイメージをいつ、どのようにビルドするかを定義するルール。
    オプション説明
    コード変更時にイメージを自動ビルド設定されたブランチにコードがプッシュされるたびにビルドをトリガーします。
    中国本土以外にデプロイされたサーバーを使用した構築中国本土以外のサーバーでイメージをビルドし、指定されたリージョンにプッシュします。Dockerfile が中国本土以外のソースからベースイメージをプルし、クロスボーダー接続が不安定な場合に有効にします。
    キャッシュなしでビルドビルドごとにベースイメージを新たにプルします。このオプションを有効にすると、ビルドが遅くなる可能性があります。

リポジトリが作成されたら、[Repositories] ページでそのリポジトリをクリックします。リポジトリ管理ページの左側のナビゲーションウィンドウに [Build] が表示されていれば、リポジトリはソースコードリポジトリに正常にバインドされています。

ステップ 3:構築ルールを追加してアーキテクチャを選択

このステップでは、Container Registry にどのブランチからビルドするか、出力イメージにどのようにタグ付けするか、どのアーキテクチャをターゲットにするかを指示する構築ルールを設定します。この例では、構築ルールは linux/amd64 と linux/arm64 をターゲットにしています。

  1. Container Registry コンソール(Container Registry コンソール)にログインします。

  2. Container Registry コンソールにログインします。

  3. トップナビゲーションバーで、リージョンを選択します。

  4. 左側のナビゲーションウィンドウで、[Instances] をクリックします。

  5. [Instances] ページで、管理する Enterprise Edition インスタンスをクリックします。

  6. 左側のナビゲーションウィンドウで、[Repository] > [Repositories] を選択します。

  7. [Repositories] ページで、対象のイメージリポジトリを見つけ、[操作] 列の [管理] をクリックします。

  8. 左側のナビゲーションウィンドウで、[Build] をクリックします。[構築ルール] セクションで、[構築ルールの追加] をクリックします。

  9. [ビルド情報] ステップで、以下のパラメーターを設定し、[次へ] をクリックします。

    パラメーター説明
    タイプ監視するソースコードリファレンスのタイプ。有効な値:[Branch][Tag]
    [Branch/Tag]ビルド元のブランチまたはタグ。正規表現がサポートされています。例えば、release-(?<imageTag>\w*) と指定すると、release-v1 のようなブランチにコードがプッシュされたときに自動的にイメージがビルドされ、v1 がイメージタグとして使用されます。詳細については、「名前付きキャプチャグループでの正規表現の使用」をご参照ください。
    説明

    正規表現を指定すると、イメージはシステムによってのみビルド可能になり、手動ビルドは無効になります。

    Dockerfile ディレクトリブランチまたはタグ内の Dockerfile を含むサブディレクトリ。例えば、Dockerfile が master ブランチのルートにある場合は、master/Dockerfile と入力します。
    [Dockerfile Filename]Dockerfile の名前。デフォルトは Dockerfile です。
  10. [タグ] ステップで、次のパラメーターを設定し、[保存] をクリックしてから、[次へ] をクリックします。

    [設定の追加] をクリックしてイメージタグを追加します。最大 3 つのイメージタグがサポートされています。
    パラメーター説明
    イメージタグビルドされたイメージのタグです。例えば latest のように指定します。ブランチ/タグ フィールドで名前付きキャプチャグループを使用した場合、そのキャプチャされた値を参照できます。
    ビルド時間(オプション) タグにプッシュタイムスタンプ (UTC+08:00) を付加します。例:20201015202010151613。この項目を設定した場合、システムのみがビルドをトリガーできます。
    コミット ID(オプション) 最新のコミット ID の一部をタグに付加します。デフォルトでは、先頭 6 文字が使用されます。この項目を設定した場合、システムのみがビルドをトリガーできます。
  11. [ビルド設定] ステップで、以下のパラメーターを設定し、[確認] をクリックします。

    パラメーター説明
    ビルドアーキテクチャイメージをビルドする対象のアーキテクチャです。複数のアーキテクチャを選択すると、それぞれに対して個別のイメージがビルドされます。すべてのイメージは同一のタグでプッシュされ、マルチアーキテクチャイメージを構成します。
    ビルドパラメーターDockerfile に渡される実行時ビルド引数です。各引数は大文字と小文字を区別するキーと値のペアです。最大 20 個のビルドパラメーターを指定できます。ビルドパラメーターを使用すると、Dockerfile 自体を変更することなく、その環境変数を動的に変更できます。
  12. 次のいずれかの方法で構築ルールをトリガーします。左側のナビゲーションウィンドウで [イメージタグ] をクリックして、イメージが作成されたことを確認します。

    • [ビルド] ページの [構築ルール] セクションで、構築ルールを見つけ、[操作] 列で [ビルド] をクリックします。

    • ソースコードリポジトリの master ブランチにコミットをプッシュして、ルールを自動的にトリガーします。

    実行中のビルドをキャンセルするには、[Build] ページの [ビルドログ] セクションに移動し、ビルドタスクを見つけて、[操作] 列の [キャンセル] をクリックします。ビルドログを表示するには、関連するビルドタスクの [操作] 列にある [ログ] をクリックします。

ステップ 4:結果の確認

  1. イメージリポジトリ管理ページの左側のナビゲーションウィンドウで、[タグ] をクリックします。[main] タグの下に、Linux/AMD64 用と Linux/ARM64 用の 2 つのイメージがリストされます。

    Multi-architecture image

  2. 各アーキテクチャで正しいイメージバリアントがプルされることを確認します。Linux/AMD64 マシンでは、次のようになります:

    docker run --rm xxx-registry.cn-hangzhou.cr.aliyuncs.com/test/golang-test:main

    期待される出力:

    Hello, amd64!

    Linux/ARM64 マシンでは、次のようになります:

    docker run --rm xxx-registry.cn-hangzhou.cr.aliyuncs.com/test/golang-test:main

    期待される出力:

    Hello, arm!

両方のマシンは同じイメージタグを使用します。それぞれが自身のアーキテクチャに一致するバリアントをプルします。

付録:名前付きキャプチャグループでの正規表現の使用

名前付きキャプチャグループは、一致した文字列の一部を抽出し、名前付きキーの下に格納します。その後、テンプレートでこのキーを参照できます。

名前付きキャプチャグループのフォーマットは次のとおりです:

(?<name>Expression)

例えば、次の式は release-11-2-10 に一致し、各バージョンコンポーネントを個別にキャプチャします:

release-(?<major>\d*)-(?<minor>\d*)-(?<version>\d*)

一致した内容は、majorminorversion という名前のグループに格納されます。次のテンプレートを使用して、11.2.10 として再構成します:

${major}.${minor}.${version}

次のステップ

コンソールの代わりにローカルマシンからマルチアーキテクチャイメージをビルドしてプッシュするには、「オンプレミスデバイスでマルチアーキテクチャイメージをビルドし、Container Registry Enterprise Edition インスタンスにプッシュする」をご参照ください。