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

1. 事前準備

Google 提供功能強大的映像檔建構工具,您可輕鬆建構及發布 Java 應用程式的 Docker 容器最佳化映像檔,無需使用 Docker 或 Dockerfile,Google Cloud 也透過 Cloud Run 將無伺服器概念導入容器。Cloud Run 是一個代管運算平台,可自動調整無狀態容器的資源配置。在本程式碼研究室中,您會發現將 Spring Boot Kotlin 應用程式容器化、發布至 Container Registry,以及在 Google Cloud 上順暢執行映像檔有多麼容易!

這個程式碼研究室會逐步引導您在 Kotlin 中設定簡單的應用程式,並示範如何使用 Google Cloud 服務和工具,包括 JibContainer RegistryCloud Run

必要條件

  • 熟悉 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

這部虛擬機器搭載您需要的所有開發工具,並提供永久的 5GB 主目錄,而且可在 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 的情況下,以最佳化方式將應用程式容器化,並發布至任何容器登錄檔。

  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,系統會顯示下列對話方塊,要求您完成一次性設定。如果看到「開始使用 Cloud Run」,請按一下。

1b2bf05712f6150a.png

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

c0b4b980662f7807.png

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

2049621ae97d62ee.png

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

564367bc65caefbf.png

  1. 只要按幾下滑鼠,就能立即部署應用程式。選取「Deployment platform」(部署平台) 下方的「Cloud Run (fully managed)」(Cloud Run (全代管)),即可在 Google Cloud 上全代管服務。選擇適合您所在位置的區域,選取「Allow unauthenticated invocations」(允許未經驗證的叫用),然後按一下「Create」(建立)。就是這麼簡單!

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,即可立即開始提供服務。

瞭解詳情