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

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

自行設定環境

  1. 登入 Cloud 控制台,建立新專案或重複使用現有專案。(如果沒有 Gmail 或 G Suite 帳戶,請建立帳戶。)

請記住專案 ID,這是所有 Google Cloud 專案中不重複的名稱 (上述名稱已遭占用,因此不適用於您,抱歉!)。本程式碼研究室稍後會將其稱為 PROJECT_ID

  1. 接著,您必須在 Cloud 控制台中啟用帳單,才能使用 Google Cloud 資源。

完成這項程式碼研究室的費用不應超過數美元,但如果您決定使用更多資源,或是將資源繼續執行,則可能會增加費用。

Google Cloud 新使用者享有價值 $300 美元的免費試用期

Cloud Shell

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

啟用 Cloud Shell

  1. 在 Cloud Shell 中,按一下「啟用 Cloud Shell」圖示

如果您從未啟動過 Cloud Shell,系統會顯示中間畫面 (摺疊式螢幕下方),說明 Cloud Shell 的用途。如果發生這種情況,請按一下「繼續」,之後就不會再看到這個畫面。一次性畫面如下所示:

佈建並連線至 Cloud Shell 的作業只需幾分鐘即可完成。

這部虛擬機器搭載各種您需要的開發工具,提供永久的 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`
gcloud config list project

指令輸出

[core]
project = <PROJECT_ID>

如未設定,請輸入下列指令設定專案:

gcloud config set project <PROJECT_ID>

指令輸出

Updated property [core/project].
  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 工具列中的「網頁預覽」,然後選取「透過以下通訊埠預覽:8080」,即可存取應用程式。

  1. 由於應用程式尚未執行任何實用動作,您應該會收到 404 回應。使用 Control+C 停止應用程式。
  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. 使用「網頁預覽」 再次檢查應用程式。這次您應該會看到「Kotlin app on Cloud Run, containerized by Jib!」訊息。使用 Control+C 停止應用程式。

使用 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:1.8.0: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 控制台,按一下「導覽選單」,然後選取「Container Registry」

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

Cloud Run 可將無伺服器技術導入容器,自動調整無狀態容器的資源配置。

  1. 再次按一下「導覽選單」,然後選取「Cloud Run」

如果您是第一次存取 Cloud Run,系統會顯示下列對話方塊,請完成一次性設定。如果看到「開始使用 Cloud Run」,請按一下。

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

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

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

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

映像檔完全部署後,Cloud Run 頁面會顯示存取應用程式的網址。快來看看!

最後,您會看到應用程式傳送的預期訊息。

Kotlin app on Cloud Run, containerized by Jib!

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

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

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

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

您使用 Jib 建構了最佳化的容器映像檔,不必安裝 Docker 或編寫 Dockerfile,並將映像檔發布至 Container Registry。Jib 會最佳化映像檔建構作業,因此即使不具備 Docker 深入知識,也能快速有效率地容器化 Java 應用程式。接著按幾下滑鼠,將應用程式部署至 Cloud Run,即可立即開始提供服務。

瞭解詳情