本页介绍了如何使用基于 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 地址,从而使服务能够使用其服务名称相互通信。