Google Cloud Run Serverless 容器

FreeGuideOnline 最新 2026-07-11

javascript const express = require('express'); const app = express(); const port = process.env.PORT || 8080;

app.get('/', (req, res) => { const target = process.env.TARGET || 'World'; res.send(Hello ${target}!); });

app.listen(port, () => { console.log(Server listening on port ${port}); });


创建 `package.json`:

```json
{
  "name": "cloud-run-hello",
  "version": "1.0.0",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "^4.18.2"
  }
}

第2步:编写 Dockerfile

在项目根目录创建 Dockerfile

FROM node:18-slim
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm ci --only=production
COPY . ./
CMD [ "node", "app.js" ]

该 Dockerfile 使用轻量级 Node.js 基础镜像,复制依赖并安装,最后复制应用代码。

第3步:构建并推送镜像到 Artifact Registry

启用 Artifact Registry API 并创建 Docker 仓库:

gcloud services enable artifactregistry.googleapis.com
gcloud auth configure-docker us-central1-docker.pkg.dev
gcloud artifacts repositories create cloud-run-repo \
  --repository-format=docker \
  --location=us-central1 \
  --description="Cloud Run demo repository"

构建镜像并打上标签,然后推送:

# 在项目根目录下
docker build -t us-central1-docker.pkg.dev/YOUR_PROJECT_ID/cloud-run-repo/hello:v1 .
docker push us-central1-docker.pkg.dev/YOUR_PROJECT_ID/cloud-run-repo/hello:v1

第4步:部署到 Cloud Run

使用 gcloud 命令部署服务:

gcloud run deploy hello \
  --image us-central1-docker.pkg.dev/YOUR_PROJECT_ID/cloud-run-repo/hello:v1 \
  --region us-central1 \
  --allow-unauthenticated

参数说明:

  • --image:指定容器镜像的完整 URL。
  • --region:部署区域,建议选择靠近用户的位置。
  • --allow-unauthenticated:允许公开访问(测试用),生产环境可去掉此标志并通过 IAM 控制访问。

部署成功后,终端会返回服务的 HTTPS URL,类似: https://hello-xxxxxxxxx-uc.a.run.app

第5步:测试服务

使用 curl 或浏览器访问返回的 URL:

curl https://hello-xxxxxxxxx-uc.a.run.app

将会看到输出:Hello World!

你也可以通过环境变量定制输出,例如在部署时添加 --update-env-vars TARGET="Cloud Run",再次请求会显示 Hello Cloud Run!

进阶用法

扩缩容与并发控制

Cloud Run 默认自动根据请求数量调整实例数。你可以通过设置 --min-instances 保留少量常驻实例以消除冷启动,或通过 --max-instances 限制最大实例数来控制成本。还可以通过 --concurrency 设置每个实例同时处理的最大请求数(默认 80),以优化性能。

gcloud run deploy hello \
  --min-instances 1 \
  --max-instances 10 \
  --concurrency 50 \
  ...其他参数

自定义域名与 TLS

  1. 验证域名所有权(通过 Search Console 或 DNS 验证)。
  2. 在 Cloud Run 服务页面点击“管理自定义域”或使用命令:
    gcloud run domain-mappings create --service=hello --domain=api.example.com --region=us-central1
    
  3. 根据提示为域名添加 DNS CNAME 记录,指向 ghs.googlehosted.com。几分钟后即可通过自定义域名访问,并自动获得 Google 管理的 SSL 证书。

事件触发(Cloud Run 与 Eventarc 集成)

利用 Eventarc 让 Cloud Run 服务被事件驱动。例如,当新文件上传至 Cloud Storage 时自动触发任务处理:

gcloud eventarc triggers create process-files \
  --destination-run-service=file-processor \
  --destination-run-region=us-central1 \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=my-input-bucket" \
  --service-account=my-sa@PROJECT_ID.iam.gserviceaccount.com

任务(Jobs)的使用

Cloud Run 任务用于一次性执行,无需对外暴露端点。创建一个基本任务:

gcloud run jobs create batch-export \
  --image us-central1-docker.pkg.dev/YOUR_PROJECT_ID/cloud-run-repo/export-job \
  --region us-central1

触发任务执行:

gcloud run jobs execute batch-export --region us-central1