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

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

程式碼研究室簡介

subject上次更新時間:4月 22, 2020
account_circle作者:Google 員工

1. 事前準備

Google 提供功能強大的映像檔建構工具,可讓您輕鬆建構及發布適用於 Java 應用程式的最佳化 Docker 容器映像檔,無須使用 Docker 或 Dockerfile。Google Cloud 也透過 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 Console,建立新專案或重複使用現有專案。(如果您還沒有 Gmail 或 G Suite 帳戶,請先建立帳戶)。

提醒您,專案編號是所有 Google Cloud 專案的不重複名稱 (使用上述名稱後就無法使用,敬請見諒!)此程式碼研究室稍後將稱為 PROJECT_ID

  1. 接著,您必須在 Cloud Console 中啟用計費功能,才能使用 Google Cloud 資源。

完成這個程式碼研究室的成本應該不會超過新臺幣 $300 元,但如果您決定用到更多資源,或讓資源繼續運作,則可能需花費更多費用。

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

Cloud Shell

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

啟動 Cloud Shell

  1. 在 Cloud Console 中按一下 [啟用 Cloud Shell]

如果您之前從未啟動 Cloud Shell,系統會提供一個中繼畫面 (需捲動位置),說明其是什麼。如果是這種情況,請按一下繼續 (這樣就永遠不會再看到這個畫面)。這個一次性畫面的外觀如下:

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

這部虛擬機器已載入所有您需要的開發工具。這項服務提供永久性的 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`
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 -

請注意,初始化工具會自動將 spring-boot-starter-web 加入範本應用程式的 pom.xml 中。

  1. 變更為範本應用程式的目錄。
$ cd kotlin-jib-cloud-run
  1. 使用 Maven 建構並執行應用程式。
$ ./mvnw -DskipTests spring-boot:run
  1. 應用程式啟動時,應用程式將開始聽取通訊埠 8080。按一下 Cloud Shell 工具列中的 [Web Preview] (網頁預覽) ,然後選取 [Preview on Port 8080] (在通訊埠 8080 上預覽),即可存取應用程式。

  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. 使用網頁預覽 再次檢查應用程式。這次應會顯示「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: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 Console,按一下 [導覽選單] ,然後選取 [Container Registry]

即可看到已成功發布圖片。

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

Cloud Run 讓無伺服器服務導入容器,並自動調度無狀態容器的資源配置。

  1. 再按一下「導覽選單」圖示 ,然後選取 [Cloud Run]

如果這是您第一次存取 Cloud Run,您將看到下列一次性設定對話方塊。如果出現 [開始使用 Cloud Run],請按一下。

  1. 在 Cloud Run 頁面上,按一下 [Create Service]

  1. 在下一個畫面中,按一下「Source」(來源) 底下的 [Select] (選取)。來源是指您要在 Cloud Run 上執行的映像檔。

  1. 這個對話方塊會顯示您先前建立的映像檔。選取圖片並按一下 [繼續]

  1. 只要按幾下滑鼠,就能立即部署應用程式。在「Deployment Platform」下方,選擇 [Cloud Run (全代管)] 即可讓服務在 Google Cloud 上完全受到管理。選擇位置適用的地區,選取 [允許未經驗證的叫用],然後按一下 [建立]。這樣就大功告成了!

映像檔部署完成後,Cloud Run 頁面會顯示存取應用程式的網址。立即查看!

最後,您會看到這個應用程式顯示的訊息。

Kotlin app on Cloud Run, containerized by Jib!

大功告成!日後如要部署新的應用程式版本,請按一下頁面上的 [部署新的修訂版本]

7. 清除所用資源

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

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

8. 恭喜

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

使用 Jib 時,您無須安裝 Docker 就能建立最佳化容器映像檔,或是編寫 Dockerfile 並將其發布到 Container Registry。Jib 將映像檔建構最佳化,因此即便使用者沒有深入的 Docker 知識,也能以快速且有效率的方式為 Java 應用程式容器化。然後,只要按幾下滑鼠,就能將應用程式部署至 Cloud Run,立刻開始提供服務。

瞭解詳情