实验设置说明和要求
保护您的账号和进度。请务必在无痕浏览器窗口中,使用实验凭证运行此实验。

在 Cloud Run 上部署网站

实验 20 分钟 universal_currency_alt 1 个点数 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
此内容尚未针对移动设备进行优化。
为获得最佳体验,请在桌面设备上访问通过电子邮件发送的链接。

GSP659

Google Cloud 自学实验的徽标

概览

运行网站是一项棘手的工作,涉及创建和管理虚拟机、集群、Pod、服务等方面的工作。对于大型多层应用来说,这样的付出完全值得,但如果您只是想部署一个可供查看的网站,就没有必要这样大费周章。

Cloud Run 是 Google Cloud 对 Google 的 Knative 框架的实现。它能帮助您管理和部署网站,但又不会像虚拟机或纯 Kubernetes 部署一样产生基础设施运维开销。这样不仅可以简化管理工作,而且能在没有请求到达您的网站时,“缩容到零”。

Cloud Run 将“无服务器”开发引入容器,既可以在您自己的 Google Kubernetes Engine (GKE) 集群上运行,也可以在 Cloud Run 提供的全托管式平台即服务 (PaaS) 解决方案上运行。在本实验中,您将运行后一种场景。

这些练习旨在帮助您熟悉常见的云开发者体验:

  1. 从应用创建 Docker 容器
  2. 将容器部署到 Cloud Run
  3. 修改网站
  4. 在不停机的情况下发布新版本

学习内容

在本实验中,您将学习如何完成以下操作:

  • 使用 Cloud Build 构建 Docker 映像并将其上传到 Artifact Registry
  • 将 Docker 映像部署到 Cloud Run
  • 管理 Cloud Run 部署
  • 为 Cloud Run 上的应用设置端点

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。

如何开始实验并登录 Google Cloud 控制台

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:

    • “打开 Google Cloud 控制台”按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示“登录”页面。

    提示:将这些标签页安排在不同的窗口中,并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在“实验详细信息”窗格中找到“用户名”。

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在“实验详细信息”窗格中找到“密码”。

  6. 点击下一步

    重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于这是临时账号,请勿添加账号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。 “导航菜单”图标和“搜索”字段

激活 Cloud Shell

Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell “激活 Cloud Shell”图标

  2. 在弹出的窗口中执行以下操作:

    • 继续完成 Cloud Shell 信息窗口中的设置。
    • 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。

如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。

  1. (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
  1. 点击授权

输出:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:
gcloud config list project

输出:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

任务 1. 克隆源代码库

您要部署的是已有的网站,因此可以克隆源代码。您只需要专注于创建 Docker 映像并部署到 Cloud Run。

  1. 在 Cloud Shell 中运行以下命令,克隆 git 代码库并更改为相应的目录:
git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices
  1. 安装 NodeJS 依赖项,以便在部署前测试应用:
./setup.sh

这需要几分钟才能运行。完成后,您会看到一条成功消息。

  1. 运行以下命令启动 Web 服务器,测试您的应用:
cd ~/monolith-to-microservices/monolith npm start

输出:

Monolith listening on port 8080!
  1. 点击“网页预览”图标,接着选择在端口 8080 上预览,预览应用。

在展开的“网页预览”菜单中,“在端口 8080 上预览”选项处于选中状态

系统应该会打开一个新窗口,您可以在其中看到 Fancy Store 网页的实际效果。

Fancy Store 网站

  1. 查看网站后关闭此窗口,然后在 Cloud Shell 中按 Ctrl+C 停止 Web 服务器进程。

任务 2. 使用 Cloud Build 创建 Docker 容器

现在您已经准备好了源文件,接下来该通过 Docker 对应用进行虚拟化了!

通常,您需要分两步来完成此操作,即构建 Docker 容器和将容器推送到仓库中,以便存储映像供 GKE 拉取。借助 Cloud Build,您只需一个命令即可构建 Docker 容器并将映像放入 Artifact Registry!

Cloud Build 会压缩目录中的文件,并将它们移至 Cloud Storage 存储桶。然后,构建过程将从存储桶中提取所有文件,并使用同一目录中的 Dockerfile 来运行 Docker 构建过程。

创建目标 Docker 仓库

您必须先创建一个仓库,然后才能向其推送映像。推送映像不会触发系统创建仓库,而且 Cloud Build 服务账号也没有创建仓库的权限。

  1. 在控制台中,在搜索字段中搜索 Artifact Registry,然后点击 Artifact Registry 结果。

  2. 点击创建代码库

  3. 指定 monolith-demo 作为仓库名称。

  4. 选择 Docker 作为格式。

  5. 在“位置类型”下,选择“区域”,然后选择位置

  6. 点击创建

配置身份验证

在推送或拉取映像前,将 Docker 配置为使用 Google Cloud CLI 对向 Artifact Registry 发出的请求进行身份验证。

  • 在 Cloud Shell 中运行以下命令,设置对区域中的 Docker 仓库执行身份验证:
gcloud auth configure-docker {{{project_0.default_region | Region}}}-docker.pkg.dev

该命令将更新您的 Docker 配置。现在,您可以在 Google Cloud 项目中与 Artifact Registry 连接以推送和拉取映像。

部署映像

现在,您将部署之前构建的映像。

  1. 首先,您需要启用 Cloud Build API、Artifact Registry API 和 Cloud Run API。在 Cloud Shell 中运行以下命令以启用这些 API:
gcloud services enable artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com
  1. 启用 API 后,运行以下命令以启动构建流程:
gcloud builds submit --tag {{{project_0.default_region | Region}}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:1.0.0 注意:此过程需要几分钟时间。
  1. 在控制台中搜索 Cloud Build,然后点击 Cloud Build 搜索结果,以查看构建记录或实时监控构建过程。
  2. 历史记录页面上,您可以看到所有 build 的列表;其中应该只有您刚刚创建的 build。

“Build 历史记录”列表

  • 点击 Build ID,即可查看 Build 的所有详细信息,包括日志输出。

  • 在“Build 详情”页面中,您可以点击执行详细信息标签页,然后点击映像链接,查看创建的容器映像。

Build 详情

点击检查我的进度以验证是否完成了以下目标: 使用 Google Cloud Build 创建 Docker 容器

任务 3. 将容器部署到 Cloud Run

现在,您已经将网站容器化并将容器推送到了 Artifact Registry,接下来就可以部署到 Cloud Run 了!

有两种方法可用于部署到 Cloud Run:

  • 托管式 Cloud Run:这是一种平台即服务模式,其中所有容器生命周期都由 Cloud Run 产品本身管理。在本实验中,您将使用这种方法。
  • 在 GKE 上运行 Cloud Run:Cloud Run 具有额外的控制层,允许您从 GKE 中自带集群和 Pod。点击此处可了解详情。
  1. 运行以下命令,将映像部署到 Cloud Run:
gcloud run deploy monolith --image {{{project_0.default_region | Region}}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:1.0.0 --region {{{project_0.default_region | Region}}}
  1. 当系统询问是否允许未经身份验证就调用 [monolith] 时,输入 Y

点击检查我的进度以验证是否完成了以下目标: 将容器部署到 Cloud Run

验证部署

  1. 如需验证部署是否已成功创建,请运行以下命令:
gcloud run services list 注意:Pod 状态可能需要过一会儿才会变为“正在运行”。

输出:

✔ SERVICE: monolith REGION: {{{project_0.default_region | Region}}} URL: https://monolith-2cxtmp4m2q-uc.a.run.app LAST DEPLOYED BY: student-02-aa7a5aed362d@qwiklabs.net LAST DEPLOYED AT: 2022-08-19T19:16:14.351981Z

此输出显示了以下几项内容:您可以看到部署、部署用户(电子邮件地址)以及可用于访问应用的网址。一切似乎都已成功创建!

  1. 点击服务列表中提供的网址。您应该会看到与本地预览时相同的网站。
注意:您也可以通过控制台查看 Cloud Run 部署,只需在导航菜单中前往 Cloud Run 即可。

任务 4. 创建并发值较低的新修订版本

在本部分中,您将再次部署应用,但这次需要调整一个参数。

默认情况下,Cloud Run 应用的并发值为 80,这意味着每个容器实例一次最多可处理 80 个请求。这与函数即服务模型有很大不同,在函数即服务模型中,一个实例一次只能处理一个请求。

  1. 运行以下命令,使用并发值 1(仅用于测试)重新部署相同的容器映像,并查看会发生什么情况:
gcloud run deploy monolith --image {{{project_0.default_region | Region}}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:1.0.0 --region {{{project_0.default_region | Region}}} --concurrency 1
  1. 如需查看详细信息,在导航菜单中,依次点击 Cloud Runmonolith 服务:

单体式服务

  1. 在“服务详情”页面上,点击修订版本标签页。现在,您应该会看到已创建的 2 个修订版本。

最新部署的右侧会显示“详细信息”。

单体式应用修订版本标签页

您会看到并发值已减小为“1”。

单体式应用容器标签页

虽然此配置足以用于运行测试,但在大多数生产场景中,容器需要支持多个并发请求。

点击检查我的进度以验证是否完成了以下目标: 创建并发值较低的新修订版本

接下来,您可以恢复原始并发值,而无需重新部署。您可以将并发值恢复为默认值“80”,也可以直接将该值设置为“0”,这样会移除所有并发限制,并将其设置为默认最大值(恰好是 80)。

  1. 运行以下命令,更新当前修订版本,使用并发值 80
gcloud run deploy monolith --image {{{project_0.default_region | Region}}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:1.0.0 --region {{{project_0.default_region | Region}}} --concurrency 80

您会注意到,系统已创建另一个修订版本,流量现在已重定向,并发值也恢复到了 80。

注意: 您可能需要离开修订版本标签页,然后再返回该标签页,才能看到最新信息。

任务 5. 更改网站内容

场景:营销团队要求您更改网站的首页,他们希望页面上显示更多关于公司简介和所售产品/服务的信息。

任务:按照营销团队的要求,在首页上添加一些文字。已经有一名开发者使用名为 index.js.new 的文件创建了更改。您只需将此文件复制到 index.js,首页上就会反映所做更改。按照以下说明进行适当更改。

  1. 运行以下命令,为更新后的文件设置正确的文件名:
cd ~/monolith-to-microservices/react-app/src/pages/Home mv index.js.new index.js
  1. 输出其内容,验证所做更改是否已经应用:
cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js

最终代码应如下所示:

/* Copyright 2019 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ import React from "react"; import { Box, Paper, Typography } from "@mui/material"; export default function Home() { return ( <Box sx={{ flexGrow: 1 }}> <Paper elevation={3} sx={{ width: "800px", margin: "0 auto", padding: (theme) => theme.spacing(3, 2), }} > <Typography variant="h5">Fancy Fashion &amp; Style Online</Typography> <br /> <Typography variant="body1"> Tired of mainstream fashion ideas, popular trends and societal norms? This line of lifestyle products will help you catch up with the Fancy trend and express your personal style. Start shopping Fancy items now! </Typography> </Paper> </Box> ); }

您已经更新了 React 组件,但还需要构建 React 应用来生成静态文件。

  1. 运行下面的命令,构建 React 应用并将其复制到单体式应用公共目录:
cd ~/monolith-to-microservices/react-app npm run build:monolith

现在代码已更新,请重新构建 Docker 容器并将其发布到 Artifact Registry。您可以使用与之前相同的命令,但这次您将更新版本标签。

  1. 运行以下命令,使用更新后的映像版本 2.0.0 触发新的 Cloud Build:
cd ~/monolith-to-microservices/monolith gcloud builds submit --tag {{{project_0.default_region | Region}}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:2.0.0

在下一部分中,您将使用此映像更新应用,但不需要停机。

点击检查我的进度以验证是否完成了以下目标: 更改网站内容

任务 6. 在不停机的情况下更新网站

更改已完成,营销团队对您的更新非常满意!现在要做的是更新网站,但不能影响用户正常访问。Cloud Run 将每次部署都视为一个新的修订版本,该版本会先上线,然后流量会重定向到该版本。

默认情况下,100% 的服务入站流量会分配给最新修订版本。可以使用“路由”将不同百分比的流量分配给服务中的不同修订版本。请按照以下说明更新您的网站。

  • 运行以下命令以重新部署服务,从而将映像更新为新版本:
gcloud run deploy monolith --image {{{project_0.default_region | Region}}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:2.0.0 --region {{{project_0.default_region | Region}}}

点击检查我的进度以验证是否完成了以下目标: 在不停机的情况下更新网站

验证部署

  1. 运行以下命令,验证您的部署是否已更新:
gcloud run services describe monolith --platform managed --region {{{project_0.default_region | Region}}}

输出:

✔ Service monolith in region URL: https://monolith-hl5loimtga-uc.a.run.app Ingress: all Traffic: 100% LATEST (currently monolith-00005-xum) Last updated on 2022-08-19T18:39:39.885859Z by student-02-9af04e268b9e@qwiklabs.net: Revision monolith-00005-xum Image: -docker.pkg.dev/qwiklabs-gcp-00-30d07cf3de5b/monolith-demo/monolith:2.0.0 Port: 8080 Memory: 512Mi CPU: 1000m Service account: 467160385597-compute@developer.gserviceaccount.com Concurrency: 80 Max Instances: 1 Timeout: 300s

您会看到,该服务现在使用的是最新版本的映像,部署在一个新的修订版本中。

为了验证更改,请前往 Cloud Run 服务的外部网址,刷新页面,并确认应用名称已更新。

  1. 运行以下命令以列出服务并查看服务网址:
gcloud beta run services list
  1. 点击该服务的网址。现在,您的网站应该会显示您刚刚添加到首页组件中的文本!

更新后的 Fancy Store 网站

恭喜!

您已经使用 Cloud Run 成功部署网站,并执行了网站缩容、重新扩容和更新。

后续步骤/了解详情

如果您不熟悉这些产品,可以点击以下链接了解详情:

上次更新手册的时间:2025 年 12 月 31 日

上次测试实验的时间:2025 年 12 月 31 日

版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

Using an Incognito or private browser window is the best way to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.