本页介绍了如何使用基于 Compose 规范的文件将服务部署到 Cloud Run。
您可以通过以下方式使用 Compose 文件部署到 Cloud Run:
使用 Compose 部署到 Cloud Run 非常适合开发,并可简化从本地环境到云环境的过渡。这样一来,您就可以为本地应用和已部署的应用保持一致的配置格式。
如需在基础设施即代码 (IaC) 环境中管理生产环境,我们建议使用 Terraform。
限制
- Compose 部署会部署具有多个容器的单个 Cloud Run 服务。
- Compose 部署仅转换部分受支持的 Cloud Run 功能。
- 使用 Compose 创建的服务默认设置为最多 1 个实例。
- 虽然 Cloud Run Compose 部署简化了部署流程,但它无法取代生产环境中的全面基础设施即代码策略。
使用 Compose 从容器映像部署服务
在 compose.yaml 文件中定义服务,并从现有容器映像部署这些服务。如需了解详情,请参阅部署容器映像。
示例:单服务应用
以下示例展示了使用预构建容器映像的 Web 服务的 compose.yaml 文件。
services:
web:
image: us-docker.pkg.dev/cloudrun/container/hello
ports:
- "8080:8080"
部署服务
如需部署服务,请运行
gcloud beta run compose up命令:gcloud beta run compose up compose.yaml在系统提示时通过响应
y来响应任何提示,以安装所需组件或启用 API。可选:如果您想允许对服务进行未经身份验证的访问,请将服务设为公开。
部署完成后,系统会显示 Cloud Run 服务网址。复制此网址并将其粘贴到浏览器中,即可查看正在运行的容器。您可以通过 Google Cloud 控制台停用默认身份验证。
使用 Compose 从源代码部署
在 compose.yaml 文件中定义服务,并通过从源代码构建来部署服务。如需了解详情,请参阅从源代码部署服务。
示例:单服务应用
以下示例展示了一个 compose.yaml 文件,该文件适用于从当前目录中的源代码构建的 Web 服务。
services:
web:
build: .
ports:
- "8080:8080"
部署服务
在项目目录中,创建一个包含服务定义的
compose.yaml文件。如需部署服务,请运行
gcloud beta run compose up命令:gcloud beta run compose up compose.yaml在系统提示时,通过响应
y来响应任何提示,以安装所需组件或启用 API。可选:如果您想允许对服务进行未经身份验证的访问,请将服务设为公开。
部署完成后,系统会显示 Cloud Run 服务网址。复制此网址并将其粘贴到浏览器中,即可查看正在运行的容器。您可以通过 Google Cloud 控制台停用默认身份验证。
支持的功能
使用 compose.yaml 文件进行部署时,Cloud Run 可以自动预配 Compose 文件中定义的其他 Google Cloud 资源。如果需要资源,Cloud Run 会在创建资源之前提示您征求同意。
Cloud Run 支持以下部分 Compose 功能:
| 撰写字段 | Cloud Run 映射和说明 |
|---|---|
services |
服务会映射到已部署的 Cloud Run 服务中的各个容器。 |
volumes |
部分支持。将 |
secrets |
支持。使用 Secret Manager。 |
configs |
支持。使用 Cloud Storage。 |
build |
Cloud Build 使用 build 上下文构建容器,并将其标记和推送到 Artifact Registry 中的 |
image |
从受支持的注册表中部署预构建的容器映像。如果您有预构建的映像,请使用此选项。仅支持 Docker Hub 和 Artifact Registry 映像。对于自定义映像,您可以将映像推送到 Artifact Registry 并使用它们。 |
ports |
端口映射列表(例如 |
expose |
要公开但不发布的端口列表,例如 |
depends_on |
定义容器启动顺序。这可确保任何列在 |
cpu_count/cpus |
用于设置 Cloud Run CPU 和内存限制的提示,可根据以下逻辑自动分配资源:
|
container_name |
设置容器的名称以用于依赖项解析,如果未指定,则默认为服务名称。 |
environment |
将环境变量传递给 Cloud Run 中的相应容器。 |
command |
通过映射到 Cloud Run 中的 |
entrypoint |
受支持。 |
env_file |
受支持。 |
x-google-cloudrun:ingress-container |
(扩展程序)将此特定于 Google 的扩展程序添加到服务并设置为 |
x-google-cloudrun:volume-type: in-memory |
(扩展)将此 Google 特有的扩展添加到卷,并将其设置为 |
映射到 Secret Manager 的 Secret
如果您的 compose.yaml 文件定义了 secrets,gcloud CLI 会预配 Secret Manager 密文来存储此数据。
映射到 Cloud Storage 的卷和配置
如果您的 compose.yaml 文件定义了顶级 volumes 或 configs,gcloud CLI 会预配一个 Cloud Storage 存储桶来管理此数据。每个部署都会创建一个存储桶,并使用文件夹来分隔卷和配置。
- 命名卷:系统会在存储桶中创建一个与卷名称对应的空文件夹。
- 绑定挂载:对于绑定挂载,Cloud Run 会在部署之前将本地源目录的内容上传到存储桶中的文件夹。
- 配置:对于使用
file:来源定义的每个配置,Cloud Run 会将本地文件的内容上传到存储桶中的文件夹。
所需的角色
在部署期间,Cloud Run 会自动向已部署服务的服务身份授予访问已预配资源所需的角色:
- Cloud Storage 存储桶:
roles/storage.objectUser - Secret Manager Secret:
roles/secretmanager.secretAccessor
同一实例的容器之间的通信
Cloud Run 会在每个容器的 /etc/hosts 文件中添加一个条目。此条目将 compose.yaml 文件中的服务名称映射到其内部 IP 地址,从而使服务能够使用其服务名称相互通信。