Google は、強力なイメージ ビルドツールを提供しています。このツールを使用すると、Docker や Dockerfile を使用せずに、Java アプリ用に最適化された Docker コンテナ イメージを簡単にビルドして公開できます。Google Cloud は、ステートレス コンテナを自動的にスケーリングするマネージド コンピューティング プラットフォームである Cloud Run を使用して、サーバーレスをコンテナにもたらします。この Codelab では、Spring Boot Kotlin アプリをコンテナ化し、Container Registry に公開して、Google Cloud でイメージをシームレスに実行する方法を説明します。
この Codelab では、Kotlin で簡単なアプリを設定する手順を説明します。このアプリでは、Jib、Container Registry、Cloud Run などの Google Cloud サービスとツールを使用する方法を示します。
前提条件
- Java プログラミング言語とツールに関する知識
- Linux の標準的なテキスト エディタ(Vim、Emacs、nano など)に関する知識
演習内容
- Spring Boot Kotlin アプリを設定します。
- 最適化された Docker イメージをビルドする。
- イメージを Container Registry に公開します。
- コンテナ化されたアプリを Cloud Run で実行します。
必要なもの
- Google Cloud プロジェクト
- ブラウザ(Google Chrome など)
セルフペース型の環境設定
- Cloud コンソールにログインして、新しいプロジェクトを作成するか、既存のプロジェクトを再利用します。(Gmail アカウントまたは G Suite アカウントをお持ちでない場合は、アカウントを作成する必要があります)。
プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID
と呼びます。
- 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。
この Codelab の操作をすべて行って、費用が生じたとしても、少額です。ただし、リソースの使用量を増やしたり、実行したままにしたりすると、費用が増加する可能性があります。
Google Cloud の新規ユーザーは、300 ドル分の無料トライアルの特典があります。
Cloud Shell
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Cloud Shell(Google Cloud 上で動作するコマンドライン環境)を使用します。
Cloud Shell をアクティブにする
- Cloud コンソールで、[Cloud Shell をアクティブにする]
をクリックします。
Cloud Shell を起動したことがない場合、その内容を説明する中間画面が(スクロールしなければ見えない範囲に)が表示されます。その場合は、[続行] をクリックします(以後表示されなくなります)。この中間画面は次のようになります。
Cloud Shell のプロビジョニングと接続に少し時間がかかる程度です。
この仮想マシンには、必要な開発ツールがすべて用意されています。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働するため、ネットワーク パフォーマンスが充実しており認証もスムーズです。このコードラボでの作業のほとんどは、ブラウザまたは Chromebook から実行できます。
Cloud Shell に接続すると、すでに認証は完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。
- Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list
コマンド出力
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
コマンド出力
[core] project = <PROJECT_ID>
上記のようになっていない場合は、次のコマンドで設定できます。
gcloud config set project <PROJECT_ID>
コマンド出力
Updated property [core/project].
- Spring Initializr を使用して新しい Spring Boot アプリを生成します。
$ curl https://start.spring.io/starter.tgz \ -d language=kotlin \ -d dependencies=web \ -d baseDir=kotlin-jib-cloud-run | tar -xzvf -
Initializr は、テンプレート アプリの pom.xml
の依存関係に spring-boot-starter-web
を自動的に追加します。
- テンプレート アプリのディレクトリに移動します。
$ cd kotlin-jib-cloud-run
- Maven を使用してアプリをビルドして実行します。
$ ./mvnw -DskipTests spring-boot:run
- 起動すると、アプリはポート 8080 でリッスンを開始します。Cloud Shell ツールバーの [ウェブでプレビュー]
アイコンをクリックし、[ポート 8080 でプレビュー] を選択してアプリにアクセスします。
- アプリはまだ有用な処理を行っていないため、404 レスポンスが返されます。
Control+C
を使用してアプリを停止します。
- デモ パッケージに次の
Controller
クラスを作成します。
$ vi src/main/kotlin/com/example/demo/Controller.kt or $ nano src/main/kotlin/com/example/demo/Controller.kt
src/main/kotlin/com/example/demo/Controller.kt
package com.example.demo
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
@RestController
class Controller {
@GetMapping("/")
fun saySomething(): String {
return "Kotlin app on Cloud Run, containerized by Jib!"
}
}
- アプリを再ビルドして実行します。
$ ./mvnw spring-boot:run
- ウェブ プレビュー
を使用して、アプリを再度確認します。今回は、「
Kotlin app on Cloud Run, containerized by Jib!
」というメッセージが表示されます。Control+C
でアプリを停止します。
Jib を使用すると、Docker なしでアプリを最適な方法でコンテナ化し、任意の Container Registry に公開できます。
- 次に進む前に、Container Registry API を有効にする必要があります。これは、API にアクセスできるようにするために各プロジェクトに 1 回のみ行う必要があります。
$ gcloud services enable containerregistry.googleapis.com
- Jib を実行して Docker イメージをビルドし、Container Registry に公開します。
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:1.8.0:build \ -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run
最終的に、アプリがコンテナ化され、Container Registry に push されたことを示す次のメッセージが表示されます。
[INFO] Built and pushed image as gcr.io/PROJECT_ID/kotlin-jib-cloud-run ... [INFO] BUILD SUCCESS
エラーが表示された場合は、$GOOGLE_CLOUD_PROJECT
が Google Cloud プロジェクト ID(PROJECT_ID
)に正しく設定されているかどうかを再確認してください。
- 次に進む前に、イメージが正常に公開されていることを確認します。Cloud コンソールに戻り、ナビゲーション メニュー
をクリックして、[Container Registry] を選択します。
イメージが正常に公開されたことがわかります。
Cloud Run は、サーバーレスをコンテナに導入し、ステートレス コンテナを自動的にスケーリングします。
- ナビゲーション メニュー
をもう一度クリックし、[Cloud Run] を選択します。
Cloud Run に初めてアクセスする場合は、次のダイアログが表示され、初回設定を行います。[Cloud Run の使用を開始] が表示されたら、クリックします。
- Cloud Run ページで、[サービスを作成] をクリックします。
- 次の画面で、[ソース] の [選択] をクリックします。ソースは、Cloud Run で実行するイメージです。
- ダイアログには、以前にビルドしたイメージが表示されます。イメージを選択して [続行] をクリックします。
- アプリのデプロイは数回クリックするだけで完了します。[Deployment platform] で [Cloud Run (fully managed)] を選択すると、Google Cloud でサービスが完全に管理されます。ロケーションに適したリージョンを選択し、[未認証の呼び出しを許可する] を選択して、[作成] をクリックします。これで作業は完了です。
イメージが完全にデプロイされると、Cloud Run ページにアプリにアクセスするための URL が表示されます。確認してみましょう。
最終的に、アプリから期待されるメッセージが表示されます。
Kotlin app on Cloud Run, containerized by Jib!
これで、今後、新しいアプリ バージョンをデプロイする必要がある場合は、このページの [新しいリビジョンをデプロイ] をクリックしてデプロイできます。
- 環境をクリーンアップするには、Cloud Run にデプロイされたアプリと Container Registry に公開されたイメージを削除する必要があります。Cloud Run に移動し、アプリを選択して [削除] をクリックします。
- 同様に、Container Registry ページに移動してイメージを削除します。
これで、Spring Boot Kotlin アプリをコンテナ化して Cloud Run にデプロイできました。
Jib を使用して、Docker をインストールしたり Dockerfile を記述したりすることなく、最適化されたコンテナ イメージをビルドして Container Registry に公開しました。Jib はイメージの構築を最適化するため、Docker の深い知識がないユーザーでも Java アプリを迅速かつ効率的にコンテナ化できます。その後、数回クリックするだけで、アプリを Cloud Run にデプロイして、すぐにサービスを開始しました。