Jib を使用して Java コンテナを構築する

Jib は、Dockerfile の使用や、Docker のインストールを必要とせずにコンテナをビルドします。Jib は、MavenGradle の Jib プラグインで使用できます。あるいは、Jib Java ライブラリを使用できます。

Jib の機能

アプリケーションをコンテナ イメージにパッケージ化するすべてのステップを処理します。Dockerfile の作成に関するベスト プラクティスを知っている必要や、Docker がインストールされている必要はありません。

Docker ビルドフロー:

Docker を使用したプロジェクトから Container Registry までのステージを示す図。

Jib ビルドフロー:

Jib ではプロジェクトからコンテナ レジストリまでの中間ステージがないことを示す図。

Jib はアプリケーションを依存関係、リソース、クラスの個別レイヤに整理します。Jib はまた、Docker イメージレイヤ キャッシュを使用して変更を再ビルドするだけでビルドを高速化できます。Jib のレイヤ構造と小さいベースイメージにより、全体的な画像サイズが小さくなり、パフォーマンスとポータビリティが向上します。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Container Registry API.

    Enable the API

  7. Java がない場合は、Java をダウンロード、インストール、構成します。
  8. Maven 3.5 以降をインストールします
  9. Google Cloud CLI をインストールして初期化します。
  10. Google Cloud CLI を Docker 認証ヘルパーとして使用して、Container Registry に対して認証します。
    gcloud auth configure-docker
    他の認証方法については、必要に応じて Jib 構成ドキュメントをご覧ください。

Jib を使用してビルドする

  1. 既存のプロジェクトを選択し、ソースフォルダーに移動するか、次のコマンドでサンプルを複製します。

         git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
         cd java-docs-samples/run/helloworld

  2. pom.xml にプラグインを追加します。

    <plugin>
      <groupId>com.google.cloud.tools</groupId>
      <artifactId>jib-maven-plugin</artifactId>
      <version>2.8.0</version>
      <configuration>
        <to>
          <image>gcr.io/PROJECT/IMAGE</image>
        </to>
      </configuration>
    </plugin>
    

    置換

    • PROJECT は、Google Cloud プロジェクト ID に置き換えます。
    • IMAGE はイメージ名に置き換えます。

    pom.xml を変更したくない場合は、次のコマンドを使用します。

        mvn compile com.google.cloud.tools:jib-maven-plugin:2.8.0:build \
            -Dimage=gcr.io/PROJECT/IMAGE
  3. イメージをビルドし、コンテナ レジストリにプッシュする

    mvn compile jib:build

    成功したかどうかは、Container Registry でコンテナを見ることにより確認できます。

    Docker がインストールされている場合は、必要に応じて、ローカルの Docker インストレーションとしてビルドし、他のローカル コンテナのようにイメージを検査または実行できます。

    mvn compile jib:dockerBuild

その他のカスタマイズ

環境変数の追加やベースイメージの選択など、Dockerfile の場合と同じように Jib ビルドをカスタマイズできます。

環境変数を追加する

Dockerfile の ENV 命令と同じように、次のようにしてビルドに環境変数を追加できます。

<plugin>
  <groupId>com.google.cloud.tools</groupId>
  <artifactId>jib-maven-plugin</artifactId>
  <version>2.8.0</version>
  <configuration>
    <to>
      <image>gcr.io/PROJECT/IMAGE</image>
    </to>
    <container>
      <environment>
        <ENV_VAR>VALUE</ENV_VAR>
      </environment>
    </container>
  </configuration>
</plugin>

置換

  • PROJECT は、Google Cloud プロジェクト ID に置き換えます。
  • IMAGE はイメージ名に置き換えます。
  • ENV_VAR: NAME
  • VALUE は、目的の値に置き換えます。

これで、アプリケーションは Hello <var>VALUE</var>! に応答します。

ベースイメージを変更する

ベースイメージは、Dockerfile の FROM 命令と同等です。ベースイメージを更新するには、フィールド from.image を変更します。

デバッグにシェルを含める場合は、ベースイメージを alpine:3 または openjdk:VERSION (Java が必要な場合)に設定します。

システム パッケージを追加するには、それらのパッケージがインストールされたベースイメージを作成する必要があります。詳細については、コンテナのビルドをご覧ください。

  <plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>2.8.0</version>
    <configuration>
      <from>
        <image>gcr.io/PROJECT/BASE_IMAGE</image>
      </from>
      <to>
        <image>gcr.io/PROJECT/IMAGE_NAME</image>
      </to>
    </configuration>
  </plugin>

from.imageフィールドを、openjdk:8-alpineなどの別の Java ベースイメージに更新してみてください。

その他の Java アスペクトのカスタマイズ

Jib は、アプリケーションの実行に必要な Java ランタイム構成をサポートしています。その他のカスタマイズについては、拡張使用法をご覧ください。

コードを配布する

gcloud のデフォルトを設定する

Cloud Run サービスを gcloud のデフォルトに構成するには:

  1. デフォルト プロジェクトを設定します。

    gcloud config set project PROJECT_ID

    PROJECT_ID は、このチュートリアルで作成したプロジェクトの名前に置き換えます。

  2. 選択したリージョン向けに gcloud を構成します。

    gcloud config set run/region REGION

    REGION は、任意のサポートされている Cloud Run のリージョンに置き換えます。

Cloud Run のロケーション

Cloud Run はリージョナルです。つまり、Cloud Run サービスを実行するインフラストラクチャは特定のリージョンに配置され、そのリージョン内のすべてのゾーンで冗長的に利用できるように Google によって管理されます。

レイテンシ、可用性、耐久性の要件を満たしていることが、Cloud Run サービスを実行するリージョンを選択する際の主な判断材料になります。一般的には、ユーザーに最も近いリージョンを選択できますが、Cloud Run サービスで使用されている他の Google Cloud サービスのロケーションも考慮する必要があります。使用する Google Cloud サービスが複数のロケーションにまたがっていると、サービスの料金だけでなくレイテンシにも影響します。

Cloud Run は、次のリージョンで利用できます。

ティア 1 料金を適用

  • asia-east1(台湾)
  • asia-northeast1(東京)
  • asia-northeast2(大阪)
  • europe-north1(フィンランド) リーフアイコン 低 CO2
  • europe-southwest1(マドリッド) リーフアイコン 低 CO2
  • europe-west1(ベルギー) リーフアイコン 低 CO2
  • europe-west4(オランダ)
  • europe-west8(ミラノ)
  • europe-west9(パリ) リーフアイコン 低 CO2
  • us-central1(アイオワ) リーフアイコン 低 CO2
  • us-east1(サウスカロライナ)
  • us-east4(北バージニア)
  • us-east5(コロンバス)
  • us-west1(オレゴン) リーフアイコン 低 CO2

ティア 2 料金を適用

  • asia-east2(香港)
  • asia-northeast3(ソウル、韓国)
  • asia-southeast1(シンガポール)
  • asia-southeast2 (ジャカルタ)
  • asia-south1(ムンバイ、インド)
  • asia-south2(デリー、インド)
  • australia-southeast1(シドニー)
  • australia-southeast2(メルボルン)
  • europe-central2(ワルシャワ、ポーランド)
  • europe-west2(ロンドン、イギリス)
  • europe-west3(フランクフルト、ドイツ)
  • europe-west6(スイス、チューリッヒ) リーフアイコン 低 CO2
  • northamerica-northeast1(モントリオール) リーフアイコン 低 CO2
  • northamerica-northeast2(トロント) リーフアイコン 低 CO2
  • southamerica-east1(サンパウロ、ブラジル) リーフアイコン 低 CO2
  • southamerica-west1(サンティアゴ、チリ)
  • us-west2(ロサンゼルス)
  • us-west3(ソルトレイクシティ)
  • us-west4(ラスベガス)

Cloud Run サービスをすでに作成している場合は、Cloud Console の Cloud Run ダッシュボードにリージョンが表示されます。

Cloud Run へのデプロイ

gcloud CLI を使用して、Container Registry から Cloud Run または Cloud Run for Anthos にコンテナをデプロイします。

次のコマンドを使用してコンテナ イメージをデプロイします。

gcloud run deploy SERVICE-NAME \
    --image gcr.io/PROJECT/IMAGE \
    --platform managed

置換

  • SERVICE-NAME は、選択したサービス名に置き換えます。
  • PROJECT は、Google Cloud プロジェクト ID に置き換えます。
  • IMAGE はイメージ名に置き換えます。

コンテナ イメージは、gcloud の設定で構成したサービスとリージョン(Cloud Run)またはクラスタ(Cloud Run for Anthos)にデプロイされることに注意してください。

Cloud Run にデプロイする場合は、未認証の呼び出しを許可するように求められます。サービスにすぐにアクセスしたい場合は、「未認証を許可する」メッセージに「はい」(y)と答えます。サービスが非公開で、リクエストに認証を含める必要がある場合は、「未認証を許可する」メッセージに「いいえ」(n)と答えます。

サービスが公開されている場合は、デプロイが成功した後に表示される URL を使用して、デプロイされたコンテナにアクセスします。サービスが非公開の場合、次の curl コマンドを使用してサービスを呼び出します。

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL

Cloud Run for Anthos にデプロイされている場合は、デプロイしたサービスにアクセスするをご覧ください。

クリーンアップ

このチュートリアル用に新規プロジェクトを作成した場合は、そのプロジェクトを削除します。既存のプロジェクトを使用し、このチュートリアルで変更を加えずに残す場合は、チュートリアル用に作成したリソースを削除します。

プロジェクトを削除する

課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

チュートリアル リソースを削除する

  1. このチュートリアルでデプロイした Cloud Run サービスを削除します。

    gcloud run services delete SERVICE-NAME

    SERVICE-NAME は、選択したサービス名です。

    Cloud Run サービスは Google Cloud Console から削除することもできます。

  2. チュートリアルの設定時に追加した gcloud のデフォルト リージョン構成を削除します。

     gcloud config unset run/region
    
  3. プロジェクト構成を削除します。

     gcloud config unset project
    

次のステップ

  • コンテナを Cloud Run にデプロイする際に適用される契約の詳細については、コンテナ契約をご覧ください。
  • Cloud Build トリガーを使用して Cloud Run サービスのビルドとデプロイを自動化するには、継続的デプロイの設定をご覧ください。
  • Jib の使用とカスタマイズの詳細については、Jib の GitHub リポジトリをご覧ください。