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

Container Registry:Dockerfile を使用して Java アプリケーションのイメージをビルドする

最終更新日:Apr 18, 2025

Dockerfile のマルチステージビルドと Alibaba Cloud Container Registry のイメージビルドサービスを使用して、Java アプリケーション用のサイズの小さいイメージを安全かつ迅速にビルドできます。

前提条件

背景情報

Docker イメージビルドにおける一般的な問題

Container Registry のイメージビルド機能は、Dockerfile を使用してアプリケーションの最終イメージをビルドします。このプロセス中に、以下の問題が発生する可能性があります。

  • Dockerfile の記述が難しい。

    強力なプログラミング言語のフレームワーク、特に Java を使用してアプリケーションをビルドすることに慣れている場合、アプリケーションイメージをビルドするための Dockerfile の記述が難しい場合があります。

  • 最終イメージのサイズが大きくなる可能性がある。

    イメージをビルドするときに、アプリケーションのコンパイル、テスト、およびパッケージ化プロセスを同じ Dockerfile に含める場合があります。 Dockerfile の各コマンドはイメージのレイヤーを作成するため、イメージの構造が複雑になり、イメージサイズが大きくなります。

  • ソースコードが漏洩する可能性がある。

    アプリケーションのソースコードを最終イメージにパッケージ化すると、コードが漏洩する可能性があります。

マルチステージビルドの利点

Dockerfile でマルチステージビルドを使用して、Java などのコンパイル言語で開発されたアプリケーションのイメージをビルドすると、以下の利点があります。

  • 最終イメージは安全な方法でビルドされます。

    イメージビルドの最初のステージでは、適切なベースイメージを指定する必要があります。次に、ソースコードをベースイメージにコピーし、アプリケーションの依存関係をダウンロードし、ソースコードをコンパイルし、アプリケーションをテストし、アプリケーションをパッケージ化する必要があります。 2 番目のステージでは、別の適切なベースイメージを指定し、最初のステージで生成されたランタイム依存関係ファイルをベースイメージにコピーする必要があります。このようにして、最終イメージにはソースコードが含まれません。

  • 最終イメージのレイヤー数が少なく、サイズが小さくなります。

    最終イメージには、ベースイメージとコンパイル済みアーティファクトのみが含まれています。その結果、最終イメージはレイヤー数が少なく、必要なストレージサイズも小さくなります。

  • 最終イメージは高速でビルドされます。

    Docker や Buildkit などのビルドツールを使用して複数のビルドプロセスを同時実行することで、イメージのビルドを高速化できます。

ステップ 1:ソースコードリポジトリを Container Registry インスタンスにバインドする

Container Registry コンソールにログインし、Container Registry にソースコードリポジトリへのアクセスを承認します。この例では、Container Registry は GitHub 上のソースコードリポジトリにアクセスすることを承認されています。

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

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

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

  4. Container Registry Personal Edition インスタンスの管理ページの左側のナビゲーションウィンドウで、[リポジトリ] > [コードソース] を選択します。

  5. GitHub に対応する [アクション] 列で、[アカウントをバインド] をクリックします。 GitHub ダイアログボックスで、[ソースコードリポジトリに移動してアカウントをバインド] をクリックします。表示されるページで、ユーザー名とパスワードを入力して GitHub にログインします。

  6. 承認ページで、[AliyunDeveloper を承認] をクリックします。アカウントがバインドされている場合は、アカウントが GitHub にバインドされていることを示すメッセージが表示されます。 [コードソース] ページに移動します。 GitHub サービスのステータスが [バインド済み] と表示されていることを確認します。image

ステップ 2:イメージリポジトリを作成する

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

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

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

  4. Container Registry Personal Edition インスタンスの管理ページの左側のナビゲーションウィンドウで、[リポジトリ] > [リポジトリ] を選択します。 [リポジトリ] ページで、[リポジトリの作成] をクリックします。

  5. イメージリポジトリのパラメーターを設定します。

    パラメーター

    説明

    リージョン

    イメージリポジトリが存在するリージョン。

    中国 (杭州)

    名前空間

    イメージリポジトリが属する名前空間。イメージリポジトリは 1 つの名前空間にのみ属しますが、名前空間には複数のイメージリポジトリを含めることができます。

    test23432

    リポジトリ名

    イメージリポジトリの名前。

    test

    リポジトリタイプ

    イメージリポジトリのタイプ。有効な値:パブリック および プライベート。リポジトリタイプに関係なく、イメージリポジトリにログインした後にのみ、イメージをプッシュできます。パブリックリポジトリは、インターネット上の誰でもアクセスできます。データ損失を防ぐため、プライベートを選択することをお勧めします。

    • パブリック:イメージリポジトリにログインせずに、イメージリポジトリからイメージをプルできます。

    • プライベート:Docker クライアントでイメージリポジトリにログインした後にのみ、イメージリポジトリからイメージをプルできます。

    プライベート

    概要

    イメージリポジトリの簡単な説明。

    -

    説明

    イメージリポジトリの詳細な説明。 Markdown 形式がサポートされています。

    作成した Dockerfile と Container Registry のイメージビルド機能を使用して、イメージをビルド、パッケージ化、および実行します。

  6. [次へ] をクリックします。 [コードソース] ステップで、コードソースを指定し、ビルド設定を行います。

    パラメーター

    説明

    コードソース

    [コードソース] セクションの [GitHub] タブで、[アカウントをバインド] をクリックし、「ステップ 2:ソースコードリポジトリへのアクセスを Container Registry に承認する」でバインドしたソースコードリポジトリをバインドします。

    ビルド設定

    この例では、[コード変更時にイメージを自動的にビルド][中国本土以外にデプロイされたサーバーでビルド] を選択します。

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

    • 中国本土以外にデプロイされたサーバーでビルド:イメージは中国本土以外のデータセンターでビルドされ、指定されたリージョンのイメージリポジトリにプッシュされます。

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

  7. [リポジトリの作成] をクリックします。

    イメージリポジトリが作成されると、イメージリポジトリの詳細ページにリダイレクトされます。詳細ページでイメージリポジトリの基本情報を表示できます。

  8. イメージリポジトリの詳細ページの左側のナビゲーションウィンドウで、リポジトリ名の横にある 23030201 アイコンをクリックします。 [リポジトリ] ページで、作成したイメージリポジトリを表示できます。イメージリポジトリの [ステータス] 列に [正常] と表示されている場合、イメージリポジトリは作成されています。

ステップ 3:イメージをビルドする

  1. 左側のナビゲーション ウィンドウで、[リポジトリ] > [リポジトリ] を選択します。[リポジトリ] ページで、イメージ リポジトリを見つけます。リポジトリ名をクリックするか、[管理] 列の [アクション] をクリックして、リポジトリの詳細ページに移動します。

  2. 左側のナビゲーションウィンドウで、[ビルド] をクリックします。[ビルドルールを追加] セクションが表示されたページで、[ビルドルール] をクリックします。

  3. [ビルドルールの追加] ダイアログボックスで、必要に応じてパラメーターを設定します。

    パラメーター

    説明

    タイプ

    ビルドルールをトリガーするためにソースコードリポジトリにプッシュされるコンテンツのタイプ。有効な値:ブランチとタグ。

    ブランチ

    ブランチ/タグ

    ビルドルールをトリガーするコードブランチまたはタグ。

    master

    ビルドコンテキストディレクトリ

    Dockerfile のディレクトリ。指定されたディレクトリは相対ディレクトリであり、コードブランチのルートディレクトリが親ディレクトリとして機能します。この例では、Dockerfile のディレクトリは /Dockerfile です。 / と入力します。

    /

    Dockerfile ファイル名

    Dockerfile の名前。デフォルト値:Dockerfile。たとえば、Dockerfile のパスが /Dockerfile の場合、このパラメーターの値として Dockerfile を指定します。

    Dockerfile

    イメージタグ

    ビルドするイメージのタグ。

    V1.0.0

  4. [確認] をクリックします。

  5. [ビルドルール] セクションで、作成したルールを見つけ、ルールに対応する [ビルド][アクション] 列の をクリックします。

    ビルドを開始すると、[ビルドログ] セクションにビルドレコードが生成されます。ビルドレコードのステータスが [成功] になると、イメージがビルドされます。

結果

イメージがビルドされているかどうかを確認する

Container Registry Personal Edition インスタンスの管理ページの左側のナビゲーションウィンドウで、[リポジトリ] > [リポジトリ] を選択します。リポジトリの名前をクリックするか、リポジトリに対応する [アクション] 列の [管理] をクリックします。リポジトリの詳細ページの左側のナビゲーションウィンドウで、[タグ] をクリックして、作成したイメージを表示します。

Docker でイメージを実行する

Container Registry は、2024 年 9 月 9 日から Personal Edition インスタンスの作成プロセスを調整しました。詳細については、「新しい Personal Edition インスタンスの制限」をご参照ください。 Container Registry Personal Edition インスタンスのバージョンに基づいて、イメージのプッシュ方法とプル方法を選択できます。

新しいバージョンの Personal Edition インスタンス

  1. Docker で次のコマンドを実行し、環境とリソースを準備するときに設定したパスワードを使用して、Alibaba Cloud Docker Registry にログインします。コマンド内の acr_e2******@test.aliyunid.com を Alibaba Cloud アカウントのフルネームに置き換えます。 cn-hangzhou を Personal Edition インスタンスが存在するリージョンに置き換えます。 crpi-xxxx を Personal Edition インスタンスの ID に置き換えます。 Container Registry コンソール にログインし、Personal Edition インスタンスのカードをクリックします。 [概要] ページで、[インスタンス情報] タブをクリックして、Personal Edition インスタンスの ID を取得します。

    docker login --username=acr_e2******@test.aliyunid.com crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com
  2. 次のコマンドを実行して、イメージをプルします。

    docker pull crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com/test23432/test:V1.0.0
  3. 次のコマンドを実行して、Docker イメージを表示します。

    docker images
  4. 次のコマンドを実行して、イメージを実行します。

    docker run -ti crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com/test23432/test:V1.0.0
    Hello World!

古いバージョンの Personal Edition インスタンス

  1. Docker で次のコマンドを実行し、環境とリソースを準備するときに設定したパスワードを使用して、Alibaba Cloud Docker Registry にログインします。コマンド内の acr_e2******@test.aliyunid.com を Alibaba Cloud アカウントのフルネームに置き換えます。 cn-hangzhou を Personal Edition インスタンスが存在するリージョンに置き換えます。

    docker login --username=acr_e2******@test.aliyunid.com registry.cn-hangzhou.cr.aliyuncs.com
  2. 次のコマンドを実行して、イメージをプルします。コマンド内の cn-hangzhou を Personal Edition インスタンスが存在するリージョンに置き換えます。 test23432 を使用する名前空間に置き換えます。 test:V1.0.0 を使用するリポジトリ名とイメージタグに置き換えます。

    docker pull registry.cn-hangzhou.cr.aliyuncs.com/test23432/test:V1.0.0
  3. 次のコマンドを実行して、Docker イメージを表示します。

    docker images
  4. 次のコマンドを実行して、イメージを実行します。コマンド内の cn-hangzhou を Personal Edition インスタンスが存在するリージョンに置き換えます。 test23432 を使用する名前空間に置き換えます。 test:V1.0.0 を使用するリポジトリ名とイメージタグに置き換えます。

    docker run -ti registry.cn-hangzhou.cr.aliyuncs.com/test23432/test:V1.0.0
    Hello World!