將 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 服務和工具,包括 Jib、Container Registry 和 Cloud 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.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.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 的情況下,以最佳化方式將應用程式容器化,並發布至任何容器登錄檔。

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

瞭解詳情