Google 提供了一个强大的映像构建工具,借助该工具,您可以在没有 Docker 或 Dockerfile 的情况下,立即轻松构建和发布适用于 Java 应用的优化 Docker 容器映像。Google Cloud 还通过 Cloud Run 将无服务器技术引入容器,Cloud Run 是一个可自动扩缩无状态容器的托管式计算平台。在此 Codelab 中,您将了解将 Spring Boot Kotlin 应用容器化、轻松发布到 Container Registry 以及以无缝的方式在 Google Cloud 上运行映像是如此简单!
此 Codelab 将引导您在 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
自定进度的环境设置
- 登录 Cloud Console,然后创建一个新项目或重复使用现有项目。(如果您还没有 Gmail 或 G Suite 帐号,则必须创建一个。)
请记住项目 ID,它在所有 Google Cloud 项目中都是唯一的名称(上述名称已被占用,您无法使用,抱歉!)。它稍后将在此 Codelab 中被称为 PROJECT_ID
。
- 接下来,您需要在 Cloud Console 中启用结算功能,才能使用 Google Cloud 资源。
在此 Codelab 中运行仅花费几美元,但是如果您决定使用更多资源或继续让它们运行,费用可能更高。
Google Cloud 的新用户有资格获享 $300 免费试用。
Cloud Shell
虽然您可以从笔记本电脑远程操作 Google Cloud,但在此 Codelab 中,您将使用 Cloud Shell,这是一个在 Google Cloud 中运行的命令行环境。
激活 Cloud Shell
- 在 Cloud Console 中,点击激活 Cloud Shell 。
如果您以前从未启动过 Cloud Shell,您将看到一个中间屏幕(非首屏),上面描述了它是什么。如果是这种情况,请点击继续(您将永远不会再看到它)。一次性屏幕如下所示:
预配和连接到 Cloud Shell 只需花几分钟时间。
这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证。只需使用一个浏览器或 Google Chromebook 即可完成本 Codelab 中的大部分(甚至全部)工作。
在连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且相关项目已设置为您的项目 ID:
- 在 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].
- 使用 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
中的依赖项。
- 切换到模板应用的目录。
$ cd kotlin-jib-cloud-run
- 使用 Maven 构建并运行应用。
$ ./mvnw -DskipTests spring-boot:run
- 启动后,应用将开始侦听端口 8080。点击 Cloud Shell 工具栏中的网页预览,然后选择在端口 8080 上预览,以访问应用。
- 您应该会收到 404 响应,因为该应用尚未执行任何操作。使用
Control+C
停止应用。
- 在演示软件包中创建以下
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!"
}
}
- 重新构建并运行应用。
$ ./mvnw spring-boot:run
- 使用网页预览 再次查看应用。这次,您应该会看到消息“
Kotlin app on Cloud Run, containerized by Jib!
”。使用Control+C
停止应用。
借助 Jib,您可以在没有 Docker 的情况下通过优化的方式将应用容器化,并发布到任何 Container Registry。
- 在继续操作之前,您需要激活 Container Registry API。每个项目只需激活一次即可访问 API。
$ gcloud services enable containerregistry.googleapis.com
- 运行 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
)。
- 在继续操作之前,请检查映像是否已成功发布。返回 Cloud Console,点击导航菜单 ,然后选择 Container Registry。
您将看到您的映像已成功发布。
Cloud Run 将无服务器技术引入容器中,可自动扩缩无状态容器。
- 再次点击导航菜单 ,然后选择 Cloud Run。
如果这是您第一次访问 Cloud Run,您会看到用于进行一次性设置的以下对话框。如果系统显示开始使用 Cloud Run,请点击它。
- 在 Cloud Run 页面上,点击创建服务。
- 在下一个屏幕中,点击来源下的选择。来源是您要在 Cloud Run 上运行的映像。
- 该对话框将显示您之前构建的映像。选择映像,然后点击继续。
- 只需再点击几下,即可部署应用。在部署平台下,选择 Cloud Run(全代管式),以便在 Google Cloud 上全代管式服务。选择适合您所在位置的区域,选择允许未通过身份验证的调用,然后点击创建。大功告成!
映像完全部署后,Cloud Run 页面会显示一个用于访问应用的网址。试试看!
最后,您将看到应用应该显示的消息。
Kotlin app on Cloud Run, containerized by Jib!
大功告成!将来,如果您需要部署新的应用版本,可以在页面上点击部署新的修订版本。
- 要清理环境,您需要删除 Cloud Run 上部署的应用和 Container Registry 上的已发布映像。转到 Cloud Run,选择应用,然后点击删除。
- 同样,转到 Container Registry 页面并删除映像。
恭喜!您已成功将 Spring Boot Kotlin 应用容器化并部署到 Cloud Run!
使用 Jib,您可以构建优化的容器映像,而无需安装 Docker 或编写 Dockerfile 并将其发布到 Container Registry。Jib 优化了映像构造,因此没有深厚 Docker 知识的任何人都可以快速高效地将 Java 应用容器化。然后,只需点击几下,您就可以将应用部署到 Cloud Run,以立即开始提供服务。