Alibaba Cloud Container Registry (ACR) のマルチステージビルドは、ビルド時間を短縮し、安全でコンパクトな Java アプリケーションイメージを生成します。
前提条件
-
ACR が有効化されていること。
-
Docker がインストールされている必要があります。詳細については、「Docker と Docker Compose のインストールと使用」をご参照ください。
-
Java のソースコードリポジトリが GitHub、GitLab、または Bitbucket でホストされていること。
説明GitHub のシンプルな Java Maven プロジェクトをコピーしてホストし、プロセスを試すことができます。
背景情報
イメージビルドにおける一般的な問題
Dockerfile からイメージをビルドする際には、いくつかの課題が生じる可能性があります:
-
Dockerfile の記述が難しい
開発者がアプリケーションイメージをビルドするための Dockerfile の記述に慣れていない場合があります。
-
イメージが肥大化しやすい
単一の Dockerfile にコンパイル、テスト、パッケージングを含めると、不要なイメージレイヤーが追加され、階層が複雑になり、イメージファイルのサイズが大きくなります。
-
ソースコードの漏洩リスク
ソースコードが誤って最終的なイメージに含まれてしまい、セキュリティリスクを生み出す可能性があります。
マルチステージビルドの利点
Java のようなコンパイル言語では、Dockerfile でマルチステージビルドを使用することで、以下の利点が得られます:
-
イメージのセキュリティ向上
第 1 ステージでは、コンパイル時のベースイメージを使用して依存関係のダウンロード、コンパイル、テスト、アプリケーションのパッケージングを行います。第 2 ステージでは、軽量なランタイムベースイメージを使用し、第 1 ステージからコンパイル済みアーティファクトのみをコピーします。最終的なイメージにはソースコードは含まれません。
-
イメージレイヤーとサイズの最適化
最終的なイメージには、ベースイメージとコンパイル済みアーティファクトのみが含まれます。これにより、イメージレイヤーが少なくなり、ファイルサイズが小さくなります。
-
ビルド速度の向上
Docker や BuildKit などのビルドツールは、複数のビルドステージを並行して実行できるため、全体のビルド時間を短縮できます。
ステップ 1: ソースコードリポジトリのバインド
ACR コンソールで、ホストされているコードリポジトリをバインドします。この例では GitHub リポジトリを使用します。
Container Registryコンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
[インスタンス] ページで、管理するPersonal Editionインスタンスをクリックします。
-
左側のナビゲーションペインで、 を選択します。
-
GitHub の行で、操作 列の アカウントのバインド をクリックします。表示されるダイアログボックスで、ソースコードリポジトリに移動してアカウントをバインドします をクリックして GitHub を開きます。
-
認証ページで、[AliyunDeveloper を承認] をクリックします。コードソース ページに戻ると、GitHub のステータスが バインド済み と表示され、バインドが成功したことを示します。
ステップ 2: リポジトリの作成
Container Registryコンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
[インスタンス] ページで、管理するPersonal Editionインスタンスをクリックします。
-
左側のナビゲーションペインで、を選択し、リポジトリの作成をクリックします。
-
リポジトリ情報を設定します。
パラメーター
説明
例
[リージョン]
リポジトリが配置されるリージョン。
中国 (杭州)
[名前空間]
リポジトリの名前空間。
test23432
[リポジトリ名]
リポジトリの名前を入力します。
test
[リポジトリのタイプ]
リポジトリタイプはパブリックまたはプライベートです。リポジトリタイプに関係なく、イメージをプッシュするにはログインする必要があります。データを保護するには、プライベートリポジトリを使用してください。
-
パブリック:誰でも認証なしでイメージをプルできます。
-
プライベート:イメージをプルするには認証が必要です。
プライベート
[サマリー]
簡単な説明。
-
[説明]
詳細な説明。Markdown がサポートされています。
作成した Dockerfile と ACR イメージビルドサービスを使用して、イメージをビルド、パッケージ化、実行します。
-
-
次へ をクリックして、コードソースを設定します。
パラメーター
説明
[コードソース]
コードソースを GitHub に設定し、バインドされたソースコードリポジトリを選択します。
[ビルド設定]
この例では、[コード変更時にイメージを自動的にビルドする] と 中国本土外のサーバーによるビルド を選択します。
-
Automatically Build Images When Code Changes:ブランチにコードがコミットされたときに、自動的にビルドをトリガーします。
-
[中国本土外のサーバーによるビルド]:中国本土以外のデータセンターでビルドを実行し、生成されたイメージを指定されたリージョンにプッシュします。
-
[キャッシュなしでビルド]:ビルドごとにベースの依存イメージを強制的に再プルするため、ビルド時間が増加する可能性があります。
-
-
リポジトリの作成 をクリックします。
リポジトリが作成されると、リポジトリ詳細ページに基本情報が表示されます。
-
左側のナビゲーションペインで、リポジトリ名の左にある
アイコンをクリックします。「リポジトリ」ページに、新しいリポジトリが表示されます。ステータス が 正常 の場合、リポジトリが正常に作成されたことを示します。
ステップ 3: ビルドの実行
-
左側のナビゲーションペインで、 を選択します。リポジトリの名前をクリックするか、リポジトリの 操作 列にある 管理 をクリックします。
-
左側のナビゲーションペインで、ビルドをクリックします。ビルドルール セクションで、ビルドルールの追加をクリックします。
-
ビルドルールを設定します。
パラメーター
説明
例
[タイプ]
コードがリポジトリにプッシュされたときにビルドルールをトリガーするイベント。有効な値は Branch と Tag です。
Branch
[ブランチ/タグ]
ビルド元のコードブランチ。
master
[コンテキストディレクトリをビルド]
Dockerfile が配置されているディレクトリ。これはコードブランチのルートからの相対パスです。このチュートリアルでは、フルパスは /Dockerfile なので、ここでは / と入力します。
/
[Dockerfile ファイル名]
Dockerfile の名前。デフォルトは Dockerfile です。例えば、フルパスが /Dockerfile の場合は、Dockerfile と入力します。
Dockerfile
[イメージのバージョン]
イメージバージョンのタグ。
V1.0.0
-
OK をクリックして Build ページに戻ります。
-
ビルドルール セクションで、作成したルールを見つけ、対応する 操作 列の ビルド をクリックします。
ビルドログセクションで、ビルドステータスが成功の場合、ビルドが完了したことを示します。
結果の検証
ビルド済みイメージの表示
左側のナビゲーションペインで、リポジトリ > リポジトリ を選択します。リポジトリ名をクリックするか、操作 列の 管理 をクリックします。リポジトリ詳細ページの左側のナビゲーションペインで イメージのバージョン をクリックすると、ビルドされたイメージが表示されます。
イメージの実行
2024 年 9 月 9 日から、新しい Personal Edition インスタンスのレジストリエンドポイントのフォーマットが変更されます。 詳細については、「新しい Personal Edition インスタンスの利用上の注意」をご参照ください。 ご利用のインスタンスのバージョンに基づいて、イメージをプッシュおよびプルする方法を選択してください。
新しいパーソナル版インスタンス
-
Docker で次のコマンドを実行して Alibaba Cloud Docker Registry にログオンします。 コマンドで、
acr_e2******@test.aliyunid.comを Alibaba Cloud アカウント名に、cn-hangzhouをインスタンスリージョンに、crpi-xxxxをインスタンス ID に置き換えます。 パスワードの入力を求められます。 インスタンス ID を確認するには、Alibaba Cloud Container Registry コンソールにログオンし、Personal Edition に移動して、概要 ページの インスタンス タブで インスタンス ID を確認します。docker login --username=acr_e2******@test.aliyunid.com crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com -
次のコマンドを実行して、イメージをプルします。
docker pull crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com/test23432/test:V1.0.0 -
次のコマンドを実行して、Docker イメージを表示します。
docker images -
次のコマンドを実行して、イメージを実行します。
docker run -ti crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com/test23432/test:V1.0.0 Hello World!
古いパーソナル版インスタンス
-
Docker で次のコマンドを実行して、Alibaba Cloud Docker Registry にログインします。コマンド内の
acr_e2******@test.aliyunid.comを Alibaba Cloud アカウント名に、cn-hangzhouをインスタンスのリージョンに置き換えてください。パスワードの入力を求められます。docker login --username=acr_e2******@test.aliyunid.com registry.cn-hangzhou.cr.aliyuncs.com -
次のコマンドを実行してイメージをプルします。コマンド内の
cn-hangzhouをインスタンスのリージョンに、test23432を名前空間に、test:V1.0.0をリポジトリ名とイメージタグに置き換えてください。docker pull registry.cn-hangzhou.cr.aliyuncs.com/test23432/test:V1.0.0 -
次のコマンドを実行して、Docker イメージを表示します。
docker images -
次のコマンドを実行してイメージを実行します。
cn-hangzhouをパーソナル版インスタンスのリージョンに置き換えてください。test23432を実際の名前空間に置き換えてください。test:V1.0.0を実際のリポジトリ名とイメージタグに置き換えてください。docker run -ti registry.cn-hangzhou.cr.aliyuncs.com/test23432/test:V1.0.0 Hello World!