Armベースのリソースを使用してコンテナをデプロイする場合、x86アーキテクチャとArmアーキテクチャのイメージを個別に構築し、タグを設定する必要があります。 これにより、メンテナンスコストが増加する可能性があります。 このプロセスを簡素化するために、Container Registryコンソールでマルチアーチイメージ構築タスクを設定できます。 1つのタグを使用して、複数のアーキテクチャの画像を管理できます。
前提条件
Container Registry Enterprise Editionインスタンスが作成されました。 詳細については、「Container Registry Enterprise Editionインスタンスの作成」をご参照ください。
インスタンスは、ソースコードホスティングプラットフォームにバインドされています。 詳細については、「ソースコードホスティングプラットフォームのバインド」をご参照ください。
プロジェクトは、イメージをビルドするアーキテクチャで作成できます。
背景情報
1つのアーキテクチャのみを選択した場合、イメージはそのアーキテクチャに対してのみ構築され、指定されたタグでプッシュされます。
複数のアーキテクチャを選択した場合、イメージはアーキテクチャごとに構築され、同じタグを持つ特定のイメージリポジトリにプッシュされます。 この場合、Dockerクライアントやcontainerdなどのクライアントは、リモートイメージリポジトリからクライアントのアーキテクチャに基づいてイメージを取得します。
次の表に、サポートされるアーキテクチャを示します。
オペレーティングシステム | アーキテクチャ | サポート対象 |
Linux | amd64 | はい (デフォルト) |
Linux | arm64 | 可 |
Linux | アーム /v7 | 可 |
Linux | アーム /v6 | 可 |
Windows | amd64 | 任意 |
ステップ1: プロジェクトの作成
イメージのビルドに基づくソースコードリポジトリとしてプロジェクトを作成します。 この例では、次のサンプルGolangファイルとDockerfileを使用してプロジェクトを作成できます。
// Save the file and name the file 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インスタンスをクリックします。
Enterprise Editionインスタンスの管理ページの左側のナビゲーションウィンドウで、 .
On theリポジトリページをクリックします。リポジトリの作成.
[リポジトリ情報] ステップで、[名前空間] 、[リポジトリ名] 、[リポジトリの種類] 、[タグ] 、[高速化イメージ] 、[概要] 、および [説明] パラメーターを設定します。 次に、[次へ] をクリックします。
では、コードソースステップ、構成コードソース,ビルド設定、およびビルドルールをクリックし、リポジトリの作成.
パラメーター
説明
コードソース
コードソース。
ビルド設定
コードが変更されたときにイメージを自動的にビルドする: コードがブランチからコミットされると、ビルドルールが自動的にトリガーされます。
中国本土外に配置されたサーバーを使用したビルド: イメージは中国本土外のサーバー上にビルドされ、指定されたリージョンのリポジトリにプッシュされます。 プロジェクトで使用されるDockerfileを中国本土以外のサイトからダウンロードする必要があるが、国境を越えたネットワーク接続が不安定な場合は、中国本土以外に配置されたサーバーでビルドを有効にできます。
キャッシュなしのビルド: イメージがビルドされるたびに、システムはベースイメージをプルします。 [キャッシュなしでビルド] を選択すると、ビルドプロセスが遅くなる可能性があります。
[リポジトリ] ページで、作成したイメージリポジトリをクリックします。 リポジトリ管理ページの左側のナビゲーションウィンドウに [ビルド] が表示されている場合、イメージリポジトリはソースコードリポジトリにバインドされます。
ステップ3: イメージ構築ルールの作成とアーキテクチャの選択
この例では、イメージ構築ルールを設定するときに、[ビルドアーキテクチャ] パラメーターとしてlinux/amd64とlinux/arm64が選択されています。
Container Registryコンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[インスタンス] をクリックします。
[インスタンス] ページで、管理するEnterprise Editionインスタンスをクリックします。
Enterprise Editionインスタンスの管理ページの左側のナビゲーションウィンドウで、 .
On theリポジトリページ、作成したイメージリポジトリを見つけ、管理で、アクション列を作成します。
左側のナビゲーションウィンドウで、[ビルド] をクリックします。 [ビルドルール] セクションで、[ビルドルールの追加] をクリックします。 [ビルドルールの追加] ウィザードの [ビルド情報] ステップで、パラメーターを設定し、[次へ] をクリックします。 下表にパラメーターを示します。
パラメーター
説明
データ型
ソースコードリポジトリのタイプを指定します。 有効な値: BranchとTag。
ブランチ /タグ
ブランチまたはタグを選択または入力します。 正規表現に対応しています。 release-(?<imageTag>\w *) 正規表現を指定すると、release-v1ブランチのソースコードが更新されると、システムは自動的にv1のイメージを構築します。 正規表現を指定する方法の詳細については、「付録: 名前付きキャプチャグループで正規表現を使用する」をご参照ください。
説明正規表現を指定すると、イメージはシステムによってのみ作成できます。 イメージを手動で作成することはできません。
Dockerfileディレクトリ
Dockerfileが存在するディレクトリを指定します。 ブランチまたはタグディレクトリのサブディレクトリです。 たとえば、ブランチディレクトリがmaster /で、Dockerfileがmaster /ディレクトリにある場合、値はmaster/Dockerfileです。
Dockerfileファイル名
Dockerfileの名前を指定します。 デフォルトの名前はDockerfileです。
では、タグステップ、パラメーターの設定、保存をクリックし、次へ. 下表に、各パラメーターを説明します。
説明[設定の追加] をクリックして画像タグを追加します。 最大3つの画像タグを追加できます。
パラメーター
説明
画像タグ
画像のタグ。 例: latest。 名前付きキャプチャグループを有効にできます。 たとえば、Branch/Tagに名前付きキャプチャグループを指定した場合、キャプチャされたコンテンツを使用できます。
ビルド時間
ソースコードがプッシュされた時刻 (UTC + 8) 。 例: 20201015または202010151613。
説明このパラメーターはオプションです。 このパラメーターを設定すると、システムのみがイメージを作成できます。 イメージを手動で作成することはできません。
コミットID
最後にプッシュされたコードのコミットIDから取得する文字数。 デフォルトでは、最初の6文字が使用されます。 スライダーを調整して文字数を変更できます。
説明このパラメーターはオプションです。 このパラメーターを設定すると、システムのみがイメージを作成できます。 イメージを手動で作成することはできません。
[ビルド設定] ステップで、パラメーターを設定し、[確認] をクリックします。 下表にパラメーターを示します。
パラメーター
説明
ビルドアーキテクチャ
イメージを作成するアーキテクチャ。 複数のアーキテクチャを選択できます。 複数のアーキテクチャを選択した場合、アーキテクチャの複数のコンテナイメージがイメージタグごとに作成されます。
ビルドパラメーター
イメージ構築の実行時パラメーター。 各建物パラメータは、大文字と小文字が区別されるキーと値のペアです。 最大20の建物パラメータを設定できます。 構築パラメーターを設定して、Dockerfileの環境変数を変更し、同じDockerfileに異なるステータスを表示させることができます。
イメージ構築ルールをトリガーします。
次のいずれかの方法を使用して、イメージ構築ルールをトリガーできます。
[ビルド] ページの [ビルドルール] セクションで、トリガーするイメージのビルドルールを見つけ、[操作] 列の [ビルド] をクリックします。
構築ルールをトリガーするには、ソースコードリポジトリのマスターブランチにコードを送信します。
説明トリガーされたイメージ作成タスクをキャンセルする場合は、[ビルド] ページの [ビルドログ] セクションでイメージ作成タスクを見つけ、[操作] 列の [キャンセル] をクリックします。
イメージ構築ログを表示する場合は、[ビルド] ページの [ビルドログ] セクションで、トリガーされたイメージ構築タスクを見つけ、[操作] 列の [ログ] をクリックします。
左側のナビゲーションウィンドウで、[画像タグ] をクリックします。 作成したイメージが表示されると、イメージがビルドされます。
ステップ4: 結果を確認する
作成したイメージリポジトリの管理ページの左側のナビゲーションウィンドウで、[タグ] をクリックします。 表示されるページで、ビルドされた画像を表示します。
この例では、メイン画像タグの列に2つの画像が表示されています。 一方のイメージは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, arm!
構築されたイメージは、さまざまなアーキテクチャのマシンで使用できます。
付録: 名前付きキャプチャグループで正規表現を使用する
名前付きキャプチャグループ
キャプチャグループは、正規表現の部分表現で一致するコンテンツを、数値または明示的な名前で名前が付けられたグループに配置します。 次に、正規表現の内側または外側のグループを参照できます。 キャプチャグループは、通常のキャプチャグループと名前付きキャプチャグループに分類できます。 このセクションでは、名前付きキャプチャグループについて説明します。
名前付きキャプチャグループの典型的な形式:
(?<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 Enterprise Editionインスタンスにビルドしてプッシュする」をご参照ください。