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

Container Registry:マルチアーチコンテナイメージを作成する

最終更新日:Jun 27, 2024

Armベースのリソースを使用してコンテナをデプロイする場合、x86アーキテクチャとArmアーキテクチャのイメージを個別に構築し、タグを設定する必要があります。 これにより、メンテナンスコストが増加する可能性があります。 このプロセスを簡素化するために、Container Registryコンソールでマルチアーチイメージ構築タスクを設定できます。 1つのタグを使用して、複数のアーキテクチャの画像を管理できます。

前提条件

背景情報

  • 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: イメージリポジトリの作成

イメージリポジトリを作成し、コードリポジトリにバインドします。 コードリポジトリによってトリガーされたすべてのイメージビルディングは、イメージリポジトリにプッシュされます。

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

  2. 上部のナビゲーションバーで、リージョンを選択します。

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

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

  5. Enterprise Editionインスタンスの管理ページの左側のナビゲーションウィンドウで、リポジトリ > リポジトリ.

  6. On theリポジトリページをクリックします。リポジトリの作成.

  7. [リポジトリ情報] ステップで、[名前空間][リポジトリ名][リポジトリの種類][タグ][高速化イメージ][概要] 、および [説明] パラメーターを設定します。 次に、[次へ] をクリックします。

  8. では、コードソースステップ、構成コードソース,ビルド設定、およびビルドルールをクリックし、リポジトリの作成.

    パラメーター

    説明

    コードソース

    コードソース。

    ビルド設定

    • コードが変更されたときにイメージを自動的にビルドする: コードがブランチからコミットされると、ビルドルールが自動的にトリガーされます。

    • 中国本土外に配置されたサーバーを使用したビルド: イメージは中国本土外のサーバー上にビルドされ、指定されたリージョンのリポジトリにプッシュされます。 プロジェクトで使用されるDockerfileを中国本土以外のサイトからダウンロードする必要があるが、国境を越えたネットワーク接続が不安定な場合は、中国本土以外に配置されたサーバーでビルドを有効にできます。

    • キャッシュなしのビルド: イメージがビルドされるたびに、システムはベースイメージをプルします。 [キャッシュなしでビルド] を選択すると、ビルドプロセスが遅くなる可能性があります。

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

ステップ3: イメージ構築ルールの作成とアーキテクチャの選択

この例では、イメージ構築ルールを設定するときに、[ビルドアーキテクチャ] パラメーターとしてlinux/amd64とlinux/arm64が選択されています。

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

  2. 上部のナビゲーションバーで、リージョンを選択します。

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

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

  5. Enterprise Editionインスタンスの管理ページの左側のナビゲーションウィンドウで、リポジトリ > リポジトリ.

  6. On theリポジトリページ、作成したイメージリポジトリを見つけ、管理で、アクション列を作成します。

  7. 左側のナビゲーションウィンドウで、[ビルド] をクリックします。 [ビルドルール] セクションで、[ビルドルールの追加] をクリックします。 [ビルドルールの追加] ウィザードの [ビルド情報] ステップで、パラメーターを設定し、[次へ] をクリックします。 下表にパラメーターを示します。

    パラメーター

    説明

    データ型

    ソースコードリポジトリのタイプを指定します。 有効な値: BranchとTag。

    ブランチ /タグ

    ブランチまたはタグを選択または入力します。 正規表現に対応しています。 release-(?<imageTag>\w *) 正規表現を指定すると、release-v1ブランチのソースコードが更新されると、システムは自動的にv1のイメージを構築します。 正規表現を指定する方法の詳細については、「付録: 名前付きキャプチャグループで正規表現を使用する」をご参照ください。

    説明

    正規表現を指定すると、イメージはシステムによってのみ作成できます。 イメージを手動で作成することはできません。

    Dockerfileディレクトリ

    Dockerfileが存在するディレクトリを指定します。 ブランチまたはタグディレクトリのサブディレクトリです。 たとえば、ブランチディレクトリがmaster /で、Dockerfileがmaster /ディレクトリにある場合、値はmaster/Dockerfileです。

    Dockerfileファイル名

    Dockerfileの名前を指定します。 デフォルトの名前はDockerfileです。

  8. では、タグステップ、パラメーターの設定、保存をクリックし、次へ. 下表に、各パラメーターを説明します。

    説明

    [設定の追加] をクリックして画像タグを追加します。 最大3つの画像タグを追加できます。

    パラメーター

    説明

    画像タグ

    画像のタグ。 例: latest。 名前付きキャプチャグループを有効にできます。 たとえば、Branch/Tagに名前付きキャプチャグループを指定した場合、キャプチャされたコンテンツを使用できます。

    ビルド時間

    ソースコードがプッシュされた時刻 (UTC + 8) 。 例: 20201015または202010151613。

    説明

    このパラメーターはオプションです。 このパラメーターを設定すると、システムのみがイメージを作成できます。 イメージを手動で作成することはできません。

    コミットID

    最後にプッシュされたコードのコミットIDから取得する文字数。 デフォルトでは、最初の6文字が使用されます。 スライダーを調整して文字数を変更できます。

    説明

    このパラメーターはオプションです。 このパラメーターを設定すると、システムのみがイメージを作成できます。 イメージを手動で作成することはできません。

  9. [ビルド設定] ステップで、パラメーターを設定し、[確認] をクリックします。 下表にパラメーターを示します。

    パラメーター

    説明

    ビルドアーキテクチャ

    イメージを作成するアーキテクチャ。 複数のアーキテクチャを選択できます。 複数のアーキテクチャを選択した場合、アーキテクチャの複数のコンテナイメージがイメージタグごとに作成されます。

    ビルドパラメーター

    イメージ構築の実行時パラメーター。 各建物パラメータは、大文字と小文字が区別されるキーと値のペアです。 最大20の建物パラメータを設定できます。 構築パラメーターを設定して、Dockerfileの環境変数を変更し、同じDockerfileに異なるステータスを表示させることができます。

  10. イメージ構築ルールをトリガーします。

    次のいずれかの方法を使用して、イメージ構築ルールをトリガーできます。

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

    • 構築ルールをトリガーするには、ソースコードリポジトリのマスターブランチにコードを送信します。

    説明
    • トリガーされたイメージ作成タスクをキャンセルする場合は、[ビルド] ページの [ビルドログ] セクションでイメージ作成タスクを見つけ、[操作] 列の [キャンセル] をクリックします。

    • イメージ構築ログを表示する場合は、[ビルド] ページの [ビルドログ] セクションで、トリガーされたイメージ構築タスクを見つけ、[操作] 列の [ログ] をクリックします。

    左側のナビゲーションウィンドウで、[画像タグ] をクリックします。 作成したイメージが表示されると、イメージがビルドされます。

ステップ4: 結果を確認する

  1. 作成したイメージリポジトリの管理ページの左側のナビゲーションウィンドウで、[タグ] をクリックします。 表示されるページで、ビルドされた画像を表示します。

    この例では、メイン画像タグの列に2つの画像が表示されています。 一方のイメージはLinuxオペレーティングシステムとAMD64アーキテクチャをサポートし、もう一方のイメージはLinuxオペレーティングシステムとARM64アーキテクチャをサポートします。多架构镜像

  2. 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-1011.2.10に変換できます。

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

release-11-2-10が正規表現と一致すると、サブ表現内の対応する位置の一致したコンテンツは、majorminorversionという名前のグループに自動的に配置されます。 次に、次のテンプレートを使用して11.2.10文字列を生成できます。

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

関連ドキュメント

オンプレミスのデバイスでマルチアーチコンテナイメージを構築する方法については、「オンプレミスのデバイスでマルチアーチイメージをcontainer Registry Enterprise Editionインスタンスにビルドしてプッシュする」をご参照ください。