ARM ベースのリソースを使用してコンテナをデプロイすると、コストを大幅に削減できます。しかし、このアプローチでは、x86 や ARM などの異なるアーキテクチャ用に個別のイメージをビルドおよび管理する必要があるため、メンテナンスのオーバーヘッドが増加します。Container Registry (ACR) コンソールのマルチアーキテクチャビルド機能はこのプロセスを簡素化し、単一のタグで複数のアーキテクチャのイメージを管理できるようにします。
前提条件
-
Container Registry Enterprise Edition インスタンスを作成済みであること。詳細については、「Enterprise Edition インスタンスの作成」をご参照ください。
-
ご利用のインスタンスをソースコードホスティングプラットフォームに連携済みであること。詳細については、「ソースコードホスティングプラットフォームのバインド」をご参照ください。
-
ターゲットアーキテクチャでのビルドをサポートするようにプロジェクトを設定済みであること。
背景情報
-
アーキテクチャを 1 つだけ選択した場合、システムはそのアーキテクチャのイメージのみをビルドし、指定されたタグでプッシュします。
-
複数のアーキテクチャを選択すると、ビルドシステムは選択されたすべてのアーキテクチャのイメージを同じタグでイメージリポジトリにプッシュします。Docker や containerd などのクライアントは、クライアントのアーキテクチャに一致するイメージをプルします。
サポートされているアーキテクチャを次の表に示します。
|
オペレーティングシステム |
アーキテクチャ |
サポート |
|
Linux |
amd64 |
はい (デフォルトアーキテクチャ) |
|
Linux |
arm64 |
はい |
|
Linux |
arm/v7 |
はい |
|
Linux |
arm/v6 |
はい |
|
Windows |
amd64 |
サポートされていません |
ステップ 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"]
ステップ 2: イメージリポジトリの作成
イメージリポジトリを作成し、ソースコードリポジトリに連携します。ソースコードリポジトリからトリガーされたすべてのイメージビルドは、このイメージリポジトリにプッシュされます。
Container Registry コンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
-
左側のナビゲーションウィンドウで、インスタンス を選択します。
[インスタンス] ページで、管理したい Enterprise Edition インスタンスをクリックします。
-
インスタンス詳細ページの左側のナビゲーションウィンドウで、 を選択します。
-
リポジトリ ページで、リポジトリの作成 をクリックします。
-
リポジトリ情報 ウィザードで、名前空間、リポジトリ名、リポジトリのタイプ、イメージのバージョン、高速化イメージ、サマリー、および 説明 を設定します。その後、次へ をクリックします。
-
コードソース 設定ウィザードで、コードソース、ビルド設定、および ビルドルール を設定し、リポジトリの作成 をクリックします。
パラメーター
説明
コードソース
ソースコードプロバイダー。
ビルド設定
-
コード変更時にイメージを自動的にビルド:ブランチにコードをコミットすると、ビルドルールがトリガーされます。
-
海外のソースをインテリジェントにビルド:中国本土以外のデータセンターでイメージをビルドし、指定されたリージョンにイメージをプッシュします。ご利用の Dockerfile が中国本土以外のサイトからファイルをダウンロードする必要があり、国境を越えるネットワーク接続が不安定な場合にこのオプションを選択します。
-
キャッシュなしでビルド:ビルドごとにベースイメージを強制的に新規プルします。このオプションを選択すると、イメージのビルド時間が増加する可能性があります。
リポジトリ ページで、目的のイメージリポジトリをクリックします。 左側のナビゲーションウィンドウに ビルド が表示される場合、イメージリポジトリはソースコードリポジトリに正常にリンクされています。
-
ステップ 3: マルチアーキテクチャビルドルールの作成
このデモでは、ビルドアーキテクチャとして linux/amd64 と linux/arm64 を使用します。
Container Registry コンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
-
左側のナビゲーションウィンドウで、インスタンス を選択します。
[インスタンス] ページで、管理する Enterprise Edition インスタンスをクリックします。
-
インスタンス詳細ページの左側のナビゲーションウィンドウで、 を選択します。
-
リポジトリ ページで、目的のリポジトリを見つけ、操作 列の 管理 をクリックします。
-
左側のナビゲーションウィンドウで、ビルド をクリックします。ビルドルール セクションで、ビルドルールの追加 をクリックします。ビルド情報 ステップで、パラメーターを設定し、次へ をクリックします。
パラメーター
説明
タイプ
ビルド元のソースコードのタイプ。有効な値:ブランチとタグ。
[ブランチ/タグ]
ブランチまたはタグを選択または入力します。正規表現がサポートされています。たとえば、正規表現 release-(?<imageTag>\w*) を使用すると、release-v1 ブランチでのコード変更により、v1 タグを持つイメージのビルドが自動的にトリガーされます。詳細については、「付録:正規表現の名前付きキャプチャグループ」をご参照ください。
説明正規表現を設定した後は、自動ビルドのみがトリガーされます。手動で即時ビルドをトリガーすることはできません。
Dockerfile ディレクトリ
リポジトリのルートからの Dockerfile へのパス。たとえば、Dockerfile がルートディレクトリにある場合は、/ と入力します。
Dockerfile ファイル名
Dockerfile の名前。デフォルト値は Dockerfile です。
-
イメージのバージョン ステップで、パラメーターを設定し、保存をクリックし、次に次へをクリックします。
説明構成を追加 をクリックして、イメージタグを追加します。最大 3 つのイメージタグを追加できます。
パラメーター
説明
イメージのバージョン
イメージタグ (latest など)。これは、[ブランチ/タグ] 設定からキャプチャされたコンテンツを使用するための名前付きキャプチャグループをサポートします。
ビルド時間
ソースコードがプッシュされた時刻 (UTC+08:00)。サポートされているフォーマットは YYYYMMDD と YYYYMMDDHHMM です。例:20201015 および 202010151613。
説明このパラメーターはオプションです。このパラメーターを選択した場合、自動ビルドのみがサポートされ、手動で即時ビルドをトリガーすることはできません。
[コミット ID]
最新のコードプッシュのコミット ID。デフォルトでは、最初の 6 文字が使用されます。スライダーを使用して長さを調整できます。
説明このパラメーターはオプションです。このパラメーターを選択した場合、自動ビルドのみがサポートされ、手動で即時ビルドをトリガーすることはできません。
-
構成をビルド ステップで、ビルドパラメーターを設定し、OK をクリックします。
パラメーター
説明
アーキテクチャの構築
ビルドアーキテクチャを選択します。選択したアーキテクチャのビルドは並行して実行され、結果のイメージは単一のイメージタグに関連付けられます。
タイプをビルド
イメージビルドのランタイム引数で、大文字と小文字を区別するキーと値のペアとして指定します。最大 20 個のビルド引数を設定できます。これらの引数は Dockerfile 内の環境変数を変更できるため、単一の Dockerfile で異なるイメージバリエーションを生成できます。
-
ビルドルールをトリガーします。
ビルドルールは 2 つの方法でトリガーできます:
-
ビルド ページの ビルドルール セクションで、目的の構築ルールを見つけ、操作 列の ビルド をクリックします。
-
ソースコードリポジトリの main ブランチにコードをプッシュします。
説明-
実行中のビルドタスクをキャンセルするには、ビルド ページに移動し、ビルドログ セクションで対象のタスクを見つけ、操作 列の キャンセル をクリックします。
-
ビルドタスクのログを表示するには、ビルド ページに移動します。ビルドログ セクションで、対象のタスクを見つけ、操作 列の ログ をクリックします。
左側のナビゲーションバーで、イメージのバージョン をクリックします。ビルドされたイメージが表示され、ビルドが成功したことを示します。
-
ステップ 4: ビルド結果の検証
-
ビルドが完了したら、ターゲットリポジトリの管理ページに移動し、左側のナビゲーションウィンドウで イメージのバージョン をクリックして、ターゲットタグのビルド済みイメージを表示します。
イメージタグのダイジェストリストで、main タグに linux/amd64 と linux/arm64 の両方のイメージが含まれていることが確認でき、これによりマルチアーキテクチャビルドが成功したことがわかります。
-
linux/amd64 および linux/arm64 アーキテクチャのマシンでイメージを検証します。
-
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, arm64!
この結果は、ビルドされたイメージが異なるアーキテクチャのマシンで使用できることを示しています。
-
付録:名前付きキャプチャグループ
名前付きキャプチャグループ
キャプチャグループは、正規表現内のサブ式に一致したコンテンツを保存します。このグループは、後で正規表現の内側または外側から参照できます。グループには、番号を付けるか、明示的に名前を付けることができます。この付録では、名前付きキャプチャグループについて簡単に紹介します。
名前付きキャプチャグループの一般的なフォーマットは次のとおりです:
(?<name>Expression)
名前付きキャプチャグループを使用して、release-11-2-10 を 11.2.10 に変換できます。対応する正規表現は次のとおりです:
release-(?<major>\d*)-(?<minor>\d*)-(?<version>\d*)
この正規表現が release-11-2-10 に一致すると、一致したサブ式が major、minor、version という名前のグループに自動的に保存されます。その後、次のテンプレートを使用して文字列 11.2.10 を生成できます:
${major}.${minor}.${version}
関連ドキュメント
ローカルでマルチアーキテクチャコンテナイメージをビルドする方法については、「ローカルマシンから Container Registry にマルチアーキテクチャイメージをビルドしてプッシュする」をご参照ください。