1. 简介
在诸如 Google Cloud Run 这样的无服务器(Serverless)环境中部署应用,具备良好的可扩展性和管理便利性。
在本教程中,我们将介绍如何从 Docker Hub 拉取镜像并部署到 Google Cloud Run。为了说明问题,我们以 PostgreSQL 的流行管理工具 pgAdmin 为例进行演示。
2. 前提条件
在开始部署流程之前,请确保满足以下前提条件:
- ✅ 一个已启用计费的 Google Cloud 账号
- ✅ 安装并配置好 Google Cloud SDK(gcloud)
- ✅ 已安装并运行 Docker
满足上述条件后,即可开始后续操作。
3. 从 Docker Hub 拉取镜像并部署
首先,我们需要将目标镜像从 Docker Hub 拉取到本地系统。
3.1 从 Docker Hub 拉取镜像
以 pgAdmin 为例,使用以下命令拉取官方镜像:
$ docker pull dpage/pgadmin4
Using default tag: latest
latest: Pulling from dpage/pgadmin4
43c4264eed91: Pull complete
...
Digest: sha256:585350593e8b0483941fa9a2d5ebb04b88a66e83a7b5603c169f9446b271312f
Status: Downloaded newer image for dpage/pgadmin4:latest
docker.io/dpage/pgadmin4:latest
该命令从 Docker Hub 获取最新的 pgAdmin 镜像,确保部署使用的是最新版本和功能。镜像成功拉取后,会存储在本地,可通过 docker image
命令验证。
3.2 为 Google Container Registry 标记镜像
下一步是为镜像打标签,以便上传到 Google Container Registry (GCR)。使用项目 ID 标记镜像:
$ docker tag dpage/pgadmin4 gcr.io/nifty-bird-432210-q8/pgadmin4
该命令为现有镜像创建新标签。其中 gcr.io/nifty-bird-432210-q8/pgadmin4
是目标标签,nifty-bird-432210-q8
是你的 GCP 项目 ID。
⚠️ 注意:打标签有助于 Docker 在推送镜像到 GCR 时识别正确的目标地址,为后续部署做好准备。
3.3 与 Google Cloud 认证
在推送镜像到 GCR 之前,需要先登录 Google Cloud:
$ gcloud auth login
Your browser has been opened to visit:
...
You are now logged in as [user@example.com].
Your current project is [nifty-bird-432210-q8]. You can change this setting by running:
$ gcloud config set project PROJECT_ID
然后设置当前项目:
$ gcloud config set project nifty-bird-432210-q8
Updated property [core/project].
接下来配置 Docker 使用 gcloud 凭据:
$ gcloud auth configure-docker
...
{
"credHelpers": {
"gcr.io": "gcloud",
"us.gcr.io": "gcloud",
...
}
}
Adding credentials for all GCR repositories.
...
此时,gcloud 已认证,当前项目已设置,Docker 也已准备好与 GCP 服务通信。
3.4 推送镜像至 Google Container Registry
完成标签和认证配置后,推送镜像到 GCR:
$ docker push gcr.io/nifty-bird-432210-q8/pgadmin4
Using default tag: latest
The push refers to repository [gcr.io/nifty-bird-432210-q8/pgadmin4]
03ff70d2b32a: Layer already exists
4022158531c6: Layer already exists
...
latest: digest: sha256:89f0402040f7fac463a5479636c1a7556dae867440549ff02bef9cfeab8e6be4 size: 3666
该命令将镜像上传至 GCR,路径为 gcr.io/nifty-bird-432210-q8/pgadmin4
。
⚠️ 注意:推送时间取决于镜像大小和网络速度。
3.5 在 Google Cloud Run 上部署 pgAdmin
最后,使用 gcloud 命令部署 pgAdmin 到 Cloud Run:
$ gcloud run deploy pgadmin \
--image=gcr.io/nifty-bird-432210-q8/pgadmin4 \
--platform=managed \
--region=us-central1 \
--allow-unauthenticated \
--set-env-vars "PGADMIN_DEFAULT_EMAIL=admin@example.com,PGADMIN_DEFAULT_PASSWORD=yourpassword" \
--port=80
Deploying container to Cloud Run service [pgadmin] in project [nifty-bird-432210-q8] region [us-central1]
✓ Deploying new service... Done.
✓ Creating Revision...
✓ Routing traffic...
✓ Setting IAM Policy...
Done.
Service [pgadmin] revision [pgadmin-00001-xsr] has been deployed and is serving 100 percent of traffic.
Service URL: https://pgadmin-534149333305.us-central1.run.app
命令参数说明如下:
--image
: 指定部署的容器镜像--platform=managed
: 使用托管的 Cloud Run 服务--region
: 部署区域--allow-unauthenticated
: 允许匿名访问--set-env-vars
: 设置容器环境变量(pgAdmin 登录邮箱和密码)--port
: 容器监听端口
✅ 成功部署后,Cloud Run 会返回一个访问地址,如:https://pgadmin-534149333305.us-central1.run.app
4. 使用 Cloud Build 部署
除了上述方法,还可以使用 Google Cloud Build 自动化构建和部署过程,无需本地执行 Docker 命令。
4.1 创建 Cloud Build 配置文件
创建名为 cloudbuild.yaml
的文件,内容如下:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['pull', 'dpage/pgadmin4']
- name: 'gcr.io/cloud-builders/docker'
args: ['tag', 'dpage/pgadmin4', 'gcr.io/nifty-bird-432210-q8/pgadmin4']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/nifty-bird-432210-q8/pgadmin4']
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'bash'
args:
- '-c'
- |
gcloud run deploy pgadmin \
--image=gcr.io/nifty-bird-432210-q8/pgadmin4 \
--platform=managed \
--region=us-central1 \
--allow-unauthenticated \
--set-env-vars "PGADMIN_DEFAULT_EMAIL=admin@example.com,PGADMIN_DEFAULT_PASSWORD=yourpassword" \
--port=80
timeout: 900s
该配置文件定义了四步操作:拉取、标记、推送镜像,以及最终部署到 Cloud Run。
4.2 授予 Cloud Build 服务账号权限
需要为默认服务账号添加权限,使其能够访问 Cloud Build 资源:
$ gcloud projects add-iam-policy-binding nifty-bird-432210-q8 \
--member="serviceAccount:123456789012-compute@developer.gserviceaccount.com" \
--role="roles/storage.admin"
4.3 提交构建任务
提交构建任务并触发部署流程:
$ gcloud builds submit --config cloudbuild.yaml
...
Step #3: Setting IAM policy failed, try "gcloud beta run services add-iam-policy-binding --region=us-central1 --member=allUsers --role=roles/run.invoker pgadmin"
Step #3: Service [pgadmin] revision [pgadmin-00002-4rb] has been deployed and is serving 100 percent of traffic.
Step #3: Service URL: https://pgadmin-534149333305.us-central1.run.app
Finished Step #3
PUSH
DONE
...
该命令上传 cloudbuild.yaml
文件并触发构建流程。构建完成后,pgAdmin 服务将部署到 Cloud Run。
5. 总结
本文介绍了如何从 Docker Hub 拉取镜像并部署到 Google Cloud Run。通过使用 Cloud Run 和 Cloud Build,整个流程变得更加顺畅且具备良好的可扩展性。
这种部署方式让我们可以专注于应用本身,而将基础设施管理交由 Google Cloud 处理。