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

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

Jib の機能

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

Docker ビルドフロー:

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

Jib ビルドフロー:

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

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

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. Container Registry API を有効にします。

    API を有効にする

  5. Java がない場合は、Java をダウンロード、インストール、構成します。
  6. Maven 3.5 以降をインストールします
  7. Cloud SDK をインストールして初期化します。
  8. gcloud コマンドライン ツールを 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-west1(ベルギー) リーフアイコン 低 CO2
  • europe-west4(オランダ)
  • us-central1(アイオワ) リーフアイコン 低 CO2
  • us-east1(サウスカロライナ)
  • us-east4(北バージニア)
  • 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(トロント)
  • southamerica-east1(サンパウロ、ブラジル) リーフアイコン 低 CO2
  • us-west2(ロサンゼルス)
  • us-west3(ラスベガス)
  • us-west4(ソルトレイクシティ)

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

Cloud Run へのデプロイ

Cloud SDKを使用して 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. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

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

  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 リポジトリをご覧ください。