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

Container Registry:マルチステージビルディングを含むDockerfileを使用してJavaアプリケーションのイメージをビルドする

最終更新日:Jun 27, 2024

DockerfileのマルチステージングビルディングとAlibaba Cloud Container Registryのイメージ構築サービスを使用すると、Javaアプリケーション用の小型イメージを安全かつ迅速に構築できます。

前提条件

背景情報

Dockerイメージ構築の一般的な問題

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

  • Dockerfileを書くのは難しいです。

    プログラミング言語、特にJavaの強力なフレームワークを使用してアプリケーションを構築することに精通している場合、Dockerfilesを記述してアプリケーションイメージを構築することは難しい場合があります。

  • 最終的な画像は、サイズが大きくてもよい。

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

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

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

マルチステージビルのメリット

Dockerfileでマルチステージビルディングを使用して、Javaなどのコンパイル言語を使用して開発されたアプリケーションのイメージを構築する場合、次の利点が得られます。

  • 最終的なイメージは安全な方法で構築されます。

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

  • 最終的な画像は、層が少なく、サイズが小さい。

    最終画像は、ベース画像およびコンパイルされたアーティファクトのみを含む。 その結果、最終的な画像は、いくつかの層からなり、小さな記憶サイズを必要とする。

  • 最終的なイメージは速いスピードで構築されます。

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

ステップ1: マルチステージ建物を含むDockerfileを作成する

この例では、簡単なDockerfileがGitHubで作成され、ホストされています。 Dockerfileをリポジトリにコピーします。

手順2: コンテナレジストリにソースコードリポジトリへのアクセスを許可する

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

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

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

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

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

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

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

    パラメーター

    説明

    例:

    リージョン

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

    中国 (杭州)

    名前空間

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

    test23432

    リポジトリ名

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

    test

    リポジトリ型

    イメージリポジトリのタイプ。 有効な値: PublicおよびPrivate。 リポジトリタイプに関係なく、イメージリポジトリにログインした後にのみイメージリポジトリにイメージをプッシュできます。 パブリックリポジトリはパブリックで使用できます。 データの損失を防ぐため、[プライベート] を選択することを推奨します。

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

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

    プライベート

    概要

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

    -

    説明

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

    「手順1: マルチステージビルディングを含むDockerfileを作成する」で作成したDockerfileとContainer Registryのイメージビルディング機能を使用して、イメージをビルド、パッケージ化、実行します。

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

    パラメーター

    説明

    コードソース

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

    ビルド設定

    この例では、[コードが変更されたときにイメージを自動的に構築] および [中国本土外に配置されたサーバーで構築] を選択します。

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

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

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

  7. クリックリポジトリの作成.

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

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

ステップ4: イメージを作成する

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

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

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

    項目

    説明

    例:

    データ型

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

    ブランチ

    ブランチ /タグ

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

    master

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

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

    /

    Dockerfileファイル名

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

    Dockerfile

    画像タグ

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

    V1.0.0

  4. クリック確認.

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

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

手順5: Elastic Compute Service (ECS) インスタンスへのDockerのインストール

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

  2. 左側のナビゲーションウィンドウで、[インスタンスとイメージ] > [インスタンス] を選択します。

  3. [インスタンス] ページで、接続するインスタンスを見つけ、[操作] 列の [接続] をクリックします。

  4. [リモート接続] ダイアログボックスで、[ワークベンチ] セクションの [今すぐサインイン] をクリックします。

  5. [インスタンスログイン] ダイアログボックスで、パラメーターを指定します。 ダイアログボックスの下部で [より少ないオプション] または [より多くのオプション] を選択して、単純モードまたは詳細モードに切り替えることができます。 次の表で、関連パラメーターについて説明します。 OKをクリックします。

    パラメーター

    説明

    インスタンス

    現在のECSインスタンスの情報が自動的に入力されます。

    接続

    この例では、VPCが選択されています。

    • VPCにあるECSインスタンスに接続するには、インスタンスのパブリックIPアドレスまたはプライベートIPアドレスを使用します。

    • クラシックネットワークにあるECSインスタンスに接続するには、インスタンスのパブリックIPアドレスまたは内部IPアドレスを使用します。

    認証方法

    認証方法を選択します。 この例では、パスワードベースが選択されています。 次の認証方法がサポートされています。

    • パスワードベース: rootやecs-userなどのユーザー名とパスワードを入力します。

    • 証明書ベース: rootやecs-userなどのユーザー名を入力し、証明書を入力またはアップロードします。 証明書が暗号化されている場合は、証明書のキーパスフレーズを入力します。

    • 資格情報ベース: 資格情報を選択または作成します。

      資格情報は、ユーザー名、パスワード、キーなどのインスタンス情報を保存するために使用されます。 資格情報を使用して、ユーザー名やパスワードを入力することなく、安全な方法でインスタンスにログインできます。

  6. 次のコマンドを実行して、ECSインスタンスにDockerをインストールします。

    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

結果

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

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

Dockerでイメージを実行する

  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.aliyuncs.com
  2. 次のコマンドを実行してイメージをプルします。 コマンドのcn-hangzhouを、Personal Editionインスタンスが存在するリージョンに置き換えます。 test23432を使用する名前空間に置き換えます。 test:V1.0.0を、使用するリポジトリ名とイメージタグに置き換えます。

    docker pull registry.cn-hangzhou.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.aliyuncs.com/test23432/test:V1.0.0
    Hello World!