容器化 Spring Boot Kotlin 应用并将其部署到 Cloud Run

Google 提供了一个强大的映像构建工具,借助该工具,您可以在没有 Docker 或 Dockerfile 的情况下,立即轻松构建和发布适用于 Java 应用的优化 Docker 容器映像。Google Cloud 还通过 Cloud Run 将无服务器技术引入容器,Cloud Run 是一个可自动扩缩无状态容器的托管式计算平台。在此 Codelab 中,您将了解将 Spring Boot Kotlin 应用容器化、轻松发布到 Container Registry 以及以无缝的方式在 Google Cloud 上运行映像是如此简单!

此 Codelab 将引导您在 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 Console,然后创建一个新项目或重复使用现有项目。(如果您还没有 Gmail 或 G Suite 帐号,则必须创建一个。)

请记住项目 ID,它在所有 Google Cloud 项目中都是唯一的名称(上述名称已被占用,您无法使用,抱歉!)。它稍后将在此 Codelab 中被称为 PROJECT_ID

  1. 接下来,您需要在 Cloud Console 中启用结算功能,才能使用 Google Cloud 资源。

在此 Codelab 中运行仅花费几美元,但是如果您决定使用更多资源或继续让它们运行,费用可能更高。

Google Cloud 的新用户有资格获享 $300 免费试用

Cloud Shell

虽然您可以从笔记本电脑远程操作 Google Cloud,但在此 Codelab 中,您将使用 Cloud Shell,这是一个在 Google Cloud 中运行的命令行环境。

激活 Cloud Shell

  1. 在 Cloud Console 中,点击激活 Cloud Shell

如果您以前从未启动过 Cloud Shell,您将看到一个中间屏幕(非首屏),上面描述了它是什么。如果是这种情况,请点击继续(您将永远不会再看到它)。一次性屏幕如下所示:

预配和连接到 Cloud Shell 只需花几分钟时间。

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证。只需使用一个浏览器或 Google Chromebook 即可完成本 Codelab 中的大部分(甚至全部)工作。

在连接到 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 -

请注意,Initializer 会自动将 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 的情况下通过优化的方式将应用容器化,并发布到任何 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

您将看到您的映像已成功发布。

Cloud Run 将无服务器技术引入容器中,可自动扩缩无状态容器。

  1. 再次点击导航菜单 ,然后选择 Cloud Run

如果这是您第一次访问 Cloud Run,您会看到用于进行一次性设置的以下对话框。如果系统显示开始使用 Cloud Run,请点击它。

  1. 在 Cloud Run 页面上,点击创建服务

  1. 在下一个屏幕中,点击来源下的选择。来源是您要在 Cloud Run 上运行的映像。

  1. 该对话框将显示您之前构建的映像。选择映像,然后点击继续

  1. 只需再点击几下,即可部署应用。在部署平台下,选择 Cloud Run(全代管式),以便在 Google Cloud 上全代管式服务。选择适合您所在位置的区域,选择允许未通过身份验证的调用,然后点击创建。大功告成!

映像完全部署后,Cloud Run 页面会显示一个用于访问应用的网址。试试看!

最后,您将看到应用应该显示的消息。

Kotlin app on Cloud Run, containerized by Jib!

大功告成!将来,如果您需要部署新的应用版本,可以在页面上点击部署新的修订版本

  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,以立即开始提供服务。

了解详情