在开发期间,您可以在部署前先在本地运行和测试容器映像。您可以使用 Cloud Code 或本地安装的 Docker 在本地运行和测试,包括在本地运行且可以访问 Google Cloud 服务。
准备工作
如果您是首次尝试在本地运行,您可能不具备从正在使用的受支持的容器注册表访问映像所需的所有权限。
请参阅受支持的容器注册表文档,了解如何获取访问权限。您可以使用 gcloud CLI 凭据帮助程序配置 Docker 以访问 Artifact Registry
gcloud auth configure-docker LOCATION-docker.pkg.dev
在本地测试
您可以使用 Docker、具有 Google Cloud Access 的 Docker、Cloud Code 模拟器或 Google Cloud CLI 在本地进行测试。如需了解相关说明,请选择相应的标签页。
Docker
要使用 Docker 在本地测试容器映像,请执行以下操作:
使用 Docker 命令:
PORT=8080 && docker run -p 9090:${PORT} -e PORT=${PORT} IMAGE_URL
将 IMAGE_URL 替换为对容器映像的引用,例如
us-docker.pkg.dev/cloudrun/container/hello:latest
。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
。PORT
环境变量指定应用将用于监听 HTTP 或 HTTPS 请求的端口。这是容器运行时合同中的一项要求。在此示例中,我们使用的端口是 8080。通过浏览器打开 http://localhost:9090。
如果您初次使用容器,可能需要查看 Docker 使用入门指南。如需详细了解 Docker 命令,请参阅 Docker 文档。
拥有 Google Cloud 访问权限的 Docker
如果您使用 Google Cloud 客户端库将应用与 Google Cloud 服务集成,但尚未保护这些服务以控制外部访问,则可以设置本地容器以使用应用默认凭据完成 Google Cloud 服务身份验证。
要在本地运行:
如需了解如何生成、检索和配置服务账号凭据,请参阅身份验证使用入门。
以下 Docker 运行标志会将本地系统中的凭据和配置注入本地容器:
- 使用
--volume
(-v
) 标志将凭据文件注入容器(假定您已在机器上设置GOOGLE_APPLICATION_CREDENTIALS
环境变量):-v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/FILE_NAME.json:ro
- 使用
--environment
(-e
) 标志在容器内设置GOOGLE_APPLICATION_CREDENTIALS
变量:-e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json
- 使用
(可选)使用以下完全配置的 Docker
run
命令:PORT=8080 && docker run \ -p 9090:${PORT} \ -e PORT=${PORT} \ -e K_SERVICE=dev \ -e K_CONFIGURATION=dev \ -e K_REVISION=dev-00001 \ -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json \ -v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/FILE_NAME.json:ro \ IMAGE_URL
请注意,
上例中所示的路径 是将凭据放入容器的合理位置。/tmp/keys/FILE_NAME.json
但是,您也可以选择其他目录位置。但有一项重要要求:
GOOGLE_APPLICATION_CREDENTIALS
环境变量必须与容器中的绑定装载位置匹配。另请注意,对于某些 Google Cloud 服务,您可能需要使用备用配置将本地问题排查与生产性能和数据隔离开来。
Cloud Code 模拟器
Cloud Code for VS Code 插件和 JetBrains IDE 可让您在 IDE 内的 Cloud Run 模拟器中本地运行和调试容器映像。您可以使用模拟器来配置环境以代表在 Cloud Run 上运行的服务。
您可以配置 CPU 和内存分配等属性、指定环境变量,以及设置 Cloud SQL 数据库连接。
gcloud CLI
Google Cloud CLI 包含一个用于模拟 Cloud Run 的本地开发环境,此环境可以从源代码构建容器、在本地机器上运行容器以及在源代码更改时自动重新构建容器。
如需启动本地开发环境,请执行以下操作:
将目录更改为包含服务源代码的目录。
调用命令:
gcloud beta code dev
如果本地目录中存在 Dockerfile,则用于构建容器。如果不存在 Dockerfile,则使用 Google Cloud 的 Buildpack 构建该容器。
如需查看服务是否正在运行,请在浏览器中访问 http://localhost:8080/。如果您使用 --local-port
选项指定了自定义端口,请记得在浏览器中指向该端口。
如需停止本地服务器,请执行以下操作:
- Mac OS 和 Linux:Control-C
- Windows:Control-Break
自定义服务配置
您可以使用 YAML 文件自定义在本地运行的 Cloud Run 配置。YAML 格式可用于部署 Cloud Run 服务,但仅支持部分 Cloud Run 服务设置。gcloud beta
code dev
会在当前目录中查找并使用以 *.service.dev.yaml
结尾的任何文件。如果未找到,则它将使用以 *.service.yaml
结尾的任何文件。
您可以为本地开发配置以下设置:
本地开发不需要容器 image
字段,因为命令会在命令运行时构建并提供给服务。
您可以使用以下示例 service.dev.yaml
文件进行本地开发:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-service-name spec: template: spec: containers: - env: - name: FOO value: bar
使用凭据进行测试
如需向容器授予使用 Google Cloud 服务的权限,您必须向该容器授予访问凭据。
如需使用您自己的账号向容器授予对凭据的访问权限,请使用 gcloud 登录并使用
--application-default-credential
标志:gcloud auth application-default login gcloud beta code dev --dockerfile=PATH_TO_DOCKERFILE --application-default-credential
如需将应用凭据作为服务账号提供,请使用
--service-account
标志:gcloud beta code dev --dockerfile=PATH_TO_DOCKERFILE --service-account=SERVICE_ACCOUNT_EMAIL
--service-account
标志会导致服务账号密钥下载并缓存在本地。用户负责确保密钥的安全以及删除不再需要的密钥。
确认代码在本地运行
在 Cloud Run 上本地测试时,您可以通过检查 Cloud Run 为所有容器提供的 K_REVISION
环境变量,在代码中确认容器在本地运行。
Docker
如需确认您在 Google Cloud CLI 上本地运行代码,可以尝试查询 K_REVISION
环境变量,但由于该变量未设置,因此不存在任何值。
拥有 Google Cloud 访问权限的 Docker
如果您使用了上述部分的第 3 步中的确切值确认在 Google Cloud CLI 上本地运行代码,则可以查询 K_REVISION
环境变量并查找值 dev-00001
,以确认代码在本地运行。
Cloud Code 模拟器
如需确认您在 Cloud Code 上本地运行代码,您可以查询 K_REVISION
环境变量并查找值 local
,以确认代码在本地运行。
gcloud CLI
如需确认您在 Google Cloud CLI 上本地运行代码,您可以查询 K_REVISION
环境变量并查找以 dev-
开头的值,以确认代码在本地运行。
后续步骤
- 如需了解如何在本地对损坏的 Cloud Run 应用进行问题排查,请参阅在本地对 Cloud Run 服务进行问题排查教程。
- 如需了解如何部署已构建的容器,请按照部署服务部分中的说明进行操作。