Google Cloud Run Serverless 容器
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
- 验证域名所有权(通过 Search Console 或 DNS 验证)。
- 在 Cloud Run 服务页面点击“管理自定义域”或使用命令:
gcloud run domain-mappings create --service=hello --domain=api.example.com --region=us-central1 - 根据提示为域名添加 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