
Cloud Run 是一个托管式计算平台,供您运行可通过 HTTP 请求调用的无状态容器。Cloud Run 采用无服务器设计,因此无需进行基础架构管理,让您可以专注于最重要的工作,即构建出色的应用。它基于 Knative 构建而成,可让您选择使用 Cloud Run(全托管式)或 Cloud Run for Anthos 运行容器。此 Codelab 的目标是构建容器映像并将其部署到 Cloud Run。
前提条件
不适用
自定进度的环境设置
如果您还没有 Google 账号(Gmail 或 Google Apps),则必须创建一个。登录 Google Cloud Platform Console (console.cloud.google.com) 并创建一个新项目:
请记住项目 ID,它在所有 Google Cloud 项目中都是唯一名称(很抱歉,上述名称已被占用,您无法使用!)。它稍后将在此 Codelab 中被称为 PROJECT_ID。
接下来,您需要在 Cloud Console 中启用结算功能,才能使用 Google Cloud 资源。
在此 Codelab 中运行仅花费几美元,但是如果您决定使用更多资源或继续让它们运行,费用可能更高(请参阅本文档末尾的“清理”部分)。
Google Cloud Platform 的新用户有资格获享 $300 免费试用。
Cloud Shell
虽然您可以从笔记本电脑远程操作 Google Cloud,但在此 Codelab 中,您将使用 Cloud Shell,这是一个在 Google Cloud 中运行的命令行环境。
基于 Debian 的这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5 GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。这意味着在本 Codelab 中,您只需要一个浏览器(没错,它适用于 Chromebook)。
如需激活 Google Cloud Shell,只需在开发者控制台中点击右上角的按钮(预配和连接到环境仅需花费一些时间):
点击“启动 Cloud Shell”按钮:
连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且相关项目已设置为您的 PROJECT_ID:
gcloud auth list
命令输出
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
命令输出
[core] project = <PROJECT_ID>
默认情况下,Cloud Shell 还会设置一些环境变量,这对您日后运行命令可能会很有用。
echo $GOOGLE_CLOUD_PROJECT
命令输出
<PROJECT_ID>
如果出于某种原因未设置项目,只需发出以下命令即可:
gcloud config set project <PROJECT_ID>
正在查找您的 PROJECT_ID?检查您在设置步骤中使用的 ID,或在控制台信息中心查找该 ID:
重要提示:最后,设置默认可用区和项目配置:
gcloud config set compute/zone us-central1-f
您可以选择各种不同的可用区。如需了解详情,请参阅“区域和地区”说明文档。
启用 Cloud Run API
在 Cloud Shell 中,启用 Cloud Run API。
gcloud services enable run.googleapis.com
这应该会生成一条类似于以下内容的成功消息:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
您将构建一个基于 Express 的简单 Node.js 应用来响应 HTTP 请求。
如需构建应用,请使用 Cloud Shell 创建一个名为 helloworld-nodejs 的新目录,然后切换到该目录。
mkdir helloworld-nodejs cd helloworld-nodejs
创建一个包含以下内容的 package.json 文件:
{
"name": "cloudrun-helloworld",
"version": "1.0.0",
"description": "Simple hello world sample in Node",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.17.1"
}
}请务必注意,上面的文件包含一个 start 脚本命令和一个 Express Web 应用框架依赖项。
接下来,在同一目录中,创建一个 index.js 文件,并将以下内容复制到该文件中:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('Hello world received a request.');
const target = process.env.TARGET || 'World';
res.send(`Hello ${target}!`);
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Hello world listening on port', port);
});该代码会创建一个基本 Web 服务器,以侦听由 PORT 环境变量定义的端口。您的应用现已准备就绪,可以进行容器化、测试并上传到 Container Registry。
如需将示例应用容器化,请在与源文件相同的目录中创建一个名为 Dockerfile 的新文件,并将以下内容复制到此文件中:
# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim
# Create and change to the app directory.
WORKDIR /usr/src/app
# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./
# Install production dependencies.
RUN npm install --only=production
# Copy local code to the container image.
COPY . ./
# Run the web service on container startup.
CMD [ "npm", "start" ]接下来,在包含 Dockerfile 的目录中运行以下命令,使用 Cloud Build 构建容器映像:
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
$GOOGLE_CLOUD_PROJECT 是一个环境变量,在 Cloud Shell 中运行时包含您的 Google Cloud 项目 ID。您也可以通过运行 gcloud config get-value project 获取该 ID。
推送到注册表后,您会看到一条包含映像名称 (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld) 的 SUCCESS 消息。该映像存储在 Container Registry 中,并可根据需要重复使用。
您可以使用以下命令列出与您的当前项目关联的所有容器映像:
gcloud container images list
如果您想通过 Cloud Shell 在本地运行并测试应用,可以使用下面的标准 docker 命令启动该应用:
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
在 Cloud Shell 中,点击网页预览
,然后选择在端口 8080 上预览。

系统会打开一个显示 Hello World! 的浏览器窗口。

您也可以直接使用 curl localhost:8080。
使用以下命令将容器化应用部署到 Cloud Run(请务必根据您构建的应用调整为正确的映像名称,或使用 gcr.io/cloudrun/hello 预构建的映像):
gcloud run deploy helloworld \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \ --platform managed \ --region us-central1 \ --allow-unauthenticated
通过 --allow-unauthenticated 部署选项,您可以在不进行身份验证的情况下访问应用。--platform managed \ 部署选项表示您请求的是全托管式环境(而不是通过 Anthos 请求 Kubernetes 基础架构)。
等待部署完成。 完成后,命令行会显示服务网址。
Service [helloworld] revision [helloworld-00001] has been deployed and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app
现在,您可以在网络浏览器中打开该服务网址,访问您部署的容器:

Cloud Run 可以自动对您的容器映像进行横向扩容以处理收到的请求,并在需求减少时缩容。您只需为在处理请求期间消耗的 CPU、内存和网络付费。
虽然 Cloud Run 不会对未在使用中的服务计费,但您可能仍然需要为您构建的容器映像支付存储费用。
为避免产生费用,您可以删除您的 Google Cloud 项目,让系统停止对该项目使用的所有资源计费;您也可以使用下面的命令直接删除您的 helloworld 映像:
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
如需删除 Cloud Run 服务,请使用以下命令:
gcloud run services delete helloworld \ --platform managed \ --region us-central1
恭喜!您已将封装在容器映像中的应用部署到 Cloud Run。
了解详情
建议您接下来查看快速入门:部署到 Cloud Run for Anthos on Google Cloud。
如需详细了解如何使用源代码构建适用于 Cloud Run 的无状态 HTTP 容器并将其推送到 Container Registry,请参阅以下资源:
如需详细了解 Knative(底层开源项目),请参阅 Knative。