將 Spring Boot Kotlin 應用程式容器化,並部署至 Cloud Run

1. 事前準備

Google 提供強大的映像檔建構工具,可讓您在不使用 Docker 或 Dockerfile 的情況下,快速為 Java 應用程式建構並發布最佳化的 Docker 容器映像檔。Google Cloud 也為容器提供無伺服器技術:Cloud Run 是代管運算平台,可自動調整無狀態容器的資源配置。在本程式碼研究室中,您將瞭解如何輕鬆將 Spring Boot Kotlin 應用程式容器化、發布至 Container Registry,並在 Google Cloud 中順暢執行映像檔!

本程式碼研究室會逐步引導您使用 Kotlin 設定簡單的應用程式,示範如何使用 JibContainer RegistryCloud Run 等 Google Cloud 服務和工具。

必要條件

  • 熟悉 Java 程式設計語言和工具
  • 具備標準 Linux 文字編輯器 (例如 Vim、Emacs 和 nano) 的相關知識

學習內容

  • 設定 Spring Boot Kotlin 應用程式。
  • 建構最佳化的 Docker 映像檔。
  • 將映像檔發布至 Container Registry。
  • 在 Cloud Run 執行容器化應用程式。

軟硬體需求

  • Google Cloud 專案
  • 瀏覽器,例如 Google Chrome

2. 開始設定

自修環境設定

  1. 登入 Cloud 控制台建立新專案,或是重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

提醒您,專案 ID 是所有 Google Cloud 專案的專屬名稱 (已經有人使用上述名稱,很抱歉對您不符!)。稍後在本程式碼研究室中會稱為 PROJECT_ID

  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Google Cloud 資源。

執行這個程式碼研究室並不會產生任何費用,如果有的話。請務必依照「清除所用資源」一節指示本節將說明如何關閉資源,這樣您就不會產生本教學課程結束後產生的費用。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

Cloud Shell

雖然 Google Cloud 可以從筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Cloud Shell,這是一種在 Google Cloud 中執行的指令列環境。

啟用 Cloud Shell

  1. 在 Cloud 控制台中,按一下「啟用 Cloud Shell」圖示 4292cbf4971c9786.png

bce75f34b2c53987.png

如果您先前從未啟動 Cloud Shell,您會看見中繼畫面 (需捲動位置),說明螢幕內容。如果出現這種情況,請按一下「繼續」 (之後不會再顯示)。以下是單次畫面的外觀:

70f315d7b402b476.png

佈建並連線至 Cloud Shell 只需幾分鐘的時間。

fbe3a0674c982259.png

這個虛擬機器搭載您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提高網路效能和驗證能力。在本程式碼研究室中,您的大部分作業都可以透過瀏覽器或 Chromebook 完成。

連線至 Cloud Shell 後,您應會發現自己通過驗證,且專案已設為您的專案 ID。

  1. 在 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`
  1. 在 Cloud Shell 中執行下列指令,確認 gcloud 指令知道您的專案:
gcloud config list project

指令輸出

[core]
project = <PROJECT_ID>

如果尚未設定,請使用下列指令進行設定:

gcloud config set project <PROJECT_ID>

指令輸出

Updated property [core/project].

3. 初始化 Spring Boot 應用程式

  1. 使用 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 會自動將 spring-boot-starter-web 新增至範本應用程式 pom.xml 中的依附元件。

  1. 變更為範本應用程式的目錄。
$ cd kotlin-jib-cloud-run
  1. 使用 Maven 建構及執行應用程式。
$ ./mvnw -DskipTests spring-boot:run
  1. 啟動後,應用程式就會開始監聽通訊埠 8080。點選 Cloud Shell 工具列中的「網頁預覽」圖示 396bfd51f55afb5d.png,然後選取「透過以下通訊埠預覽:8080」,即可存取應用程式。

4172e1e141daf0c1.png

  1. 由於應用程式還沒有任何用途,您應該會收到 404 回應。透過 Control+C 停止應用程式。

4. 新增網路控制器

  1. 在示範套件中建立下列 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!"
  }
}
  1. 重新建構並執行應用程式。
$ ./mvnw spring-boot:run
  1. 使用「網頁預覽」 a6cfcaa1d2119c52.png 再次檢查應用程式。這次你應該會看到「Kotlin app on Cloud Run, containerized by Jib!」訊息。使用 Control+C 停止應用程式。

5. 將應用程式容器化並發布至 Container Registry

透過 Jib,您可以在沒有 Docker 的情況下將應用程式容器化,並發布至任何 Container Registry。

  1. 您必須先啟用 Container Registry API,才能繼續操作。每項專案只需操作一次,API 就能存取。
$ gcloud services enable containerregistry.googleapis.com
  1. 執行 Jib 建構 Docker 映像檔並發布至 Container Registry。
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:3.1.1:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

最後,系統會顯示以下訊息,說明應用程式已容器化並推送至 Container Registry。

[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)。

  1. 進行下一步前,請先確認圖片是否已成功發布。返回 Cloud 控制台,按一下「導覽選單」c8b4ea3c68f4c1e3.png,然後選取「Container Registry」

6421550ba806beab.png

38ae0ca573c3dcd.png

您會看到圖片已成功發布。

c9086605411691c3.png

6. 在 Cloud Run 執行容器化應用程式

Cloud Run 為容器提供無伺服器技術,並能自動調整無狀態容器的資源配置。

  1. 再次點選「導覽選單」圖示 c8b4ea3c68f4c1e3.png,然後選取「Cloud Run」

812c7c87527ebe4a.png

如果這是您第一次存取 Cloud Run,系統會顯示下列對話方塊,讓您完成一次性設定。如果畫面上顯示「Start Using Cloud Run」,請按一下該頁面。

1b2bf05712f6150a.png

  1. 在 Cloud Run 頁面中,按一下「Create Service」(建立服務)

c0b4b980662f7807.png

  1. 在下一個畫面中,按一下「來源」底下的「選取」。來源是您要在 Cloud Run 執行的映像檔。

2049621ae97d62ee.png

  1. 對話方塊會顯示您先前建構的映像檔。選取圖片並按一下「繼續」

564367bc65caefbf.png

  1. 只要按幾下滑鼠,即可立即部署應用程式。選取「Deployment platform」(部署平台) 下方的「Cloud Run (全代管)」,在 Google Cloud 上採用全代管服務。選擇適合您所在位置的區域,選取「允許未經驗證的叫用」,然後按一下「建立」。這樣就大功告成了!

3eb0f51d15326cac.png

映像檔完整部署後,Cloud Run 頁面會顯示用於存取應用程式的網址。快來一探究竟!

8bf800dd6e2f44f2.png

最終,您會看到預期應用程式訊息。

Kotlin app on Cloud Run, containerized by Jib!

大功告成!日後如需部署新的應用程式版本,請按一下頁面上的「Deploy New Revision」

7. 清除所用資源

  1. 如要清理環境,您必須刪除已部署於 Cloud Run 的應用程式,以及 Container Registry 中已發布的映像檔。前往「Cloud Run」並選取應用程式,然後按一下「刪除」

1dfc2f51c1b5f6e.png

  1. 同樣地,前往「Container Registry」頁面並刪除映像檔。

1b724136c1655935.png

8. 恭喜

恭喜!您已成功將 Spring Boot Kotlin 應用程式容器化,並部署至 Cloud Run!

您可以使用 Jib 在不安裝 Docker 的情況下建構最佳化的容器映像檔,或是編寫 Dockerfile 並發布至 Container Registry。Jib 將映像檔建構最佳化,因此任何人若不熟悉 Docker,都能快速有效率地將 Java 應用程式容器化。接著,您只要按幾下滑鼠,就能將應用程式部署至 Cloud Run,立即開始提供服務。

瞭解詳情