Spring BootのアプリケーションをCloud Runにデプロイしていく
https://qiita.com/indes888/items/feb431bd0a0a4cce142b
の続き
前提条件
- GCPのアカウントを持っていてプロジェクトを作成済み
- gcloudがインストールされて初期設定が済んでいる
マルチステージビルドにする
ビルドとアプリケーションの起動を1つのDockerfileを使ってまとめる
FROM gradle:6.7.1-jdk11 as builder
COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle build bootjar
FROM openjdk:11-jre-slim
EXPOSE 8080
RUN mkdir /app
COPY --from=builder /home/gradle/src/build/libs/*.jar /app/bootjar.jar
ENTRYPOINT ["java", "-jar","/app/bootjar.jar"]
dockerbuild時にgradleビルドが実行される。
dockerbuild + dockerrun は以下のコマンド
docker build -t bootbuilder:v0.2 .
docker run -it --rm -v "$PWD":/home/gradle/src -p 8080:8080 bootbuilder:v0.2
localhost:8080にアクセスして文字列が表示されたら起動確認完了
Cloud Runにデプロイする
GCPのダッシュボードからCloud Runを選択し、APIを有効化しておく必要がある
まずはCloud Buildを使ってContainer Registoryにイメージをpushする
gcloud builds submit --tag gcr.io/$PROJECT_ID/bootbuilder:v0.2
$PROJECT_IDには使用するプロジェクトIDを挿入する
ビルドが実行されてイメージがpushが完了するとContainer Registoryからイメージを確認できる
次にContainer RegistoryからCloud Runにイメージをデプロイする
gcloud run deploy --image gcr.io/$PROJECT_ID/bootbuilder:v0.2 --platform managed
サービス名とデプロイするリージョンが聞かれるので適当に進める
最後に
Service URL: https://XXXXXXXXXXXXXXXXXXXXX.a.run.app
と表示されるのでアクセスして文字列が表示されればデプロイは完了
URLはCloud Runのダッシュボードからも確認できる
Cloud Runはデフォルトでコンテナの8080ポートにリクエストを転送するのでアクセスできる
使用するポートはgcloud run deployの--portオプションで変更可能
--platformオプションの説明は以下を参照
https://cloud.google.com/sdk/gcloud/reference/beta/run/deploy#--platform
参考資料
https://codefresh.io/docs/docs/learn-by-example/java/gradle/
https://cloud.google.com/run/docs/quickstarts/build-and-deploy