有啥方法可以从 docker hub 提取图像并使用 cloudbuild.yaml 部署到云运行

Posted

技术标签:

【中文标题】有啥方法可以从 docker hub 提取图像并使用 cloudbuild.yaml 部署到云运行【英文标题】:Is there any way to pull image from docker hub and deploy to cloud run using cloudbuild.yaml有什么方法可以从 docker hub 提取图像并使用 cloudbuild.yaml 部署到云运行 【发布时间】:2021-09-23 14:50:09 【问题描述】:

在文档中他们说我们可以使用 cloudbuild.yaml 文件从云容器注册表构建和部署容器到云运行:

steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE', '.']
# Push the container image to Container Registry
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'gcr.io/PROJECT_ID/IMAGE']
# Deploy container image to Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: gcloud
  args: ['run', 'deploy', 'SERVICE-NAME', '--image', 'gcr.io/PROJECT_ID/IMAGE', '--region', 'REGION', '--platform', 'managed']
images:
- gcr.io/PROJECT_ID/IMAGE

我们还可以像这样在 cloudbuild.yaml 文件中从 docker hub 拉取镜像:

steps:
- name: "maven"
  args: ["mvn", "--version"]

我想从 docker hub 拉取镜像,并使用 cloudbuil.yaml 文件构建并部署这个镜像到云运行,但我不知道该怎么做,因为我是 docker 和云运行的新手。

【问题讨论】:

【参考方案1】:

我怀疑这个问题对于 *** 来说有点过于宽泛了。

您可能会从阅读文档和了解有关这些技术的更多信息中受益。

答案还取决于安全限制。

IIRC,Cloud Run 要求您从 Google Container Registry (GCR) 部署映像,因此关键步骤是将映像从 DockerHub 传输到 GCR(docker pull 来自 DockerHub;docker tag 用于GCR;docker push 到 GCR)。

如果 DockerHub 需要身份验证,您需要先登录 DockerHub,然后才能通过它docker pull

如果 GCR 需要身份验证(可能),您需要先登录 GCR,然后才能docker push 访问它。通常,这是通过向支持 GCR 的存储桶授予 Cloud Build 的帐户写入权限来实现的。

所有这些都可以使用 Cloud Build 步骤实现(请参阅:cloud-builders)

图像在 GCR 中后,您可以使用gcloud 步骤进行部署

这些步骤可以使用 Cloud Build (cloudbuild.yaml) 来实现,形式如下:

steps:
- name: "docker"
  args:
  - "login"
  - "--username=[[username]]"
  - "--password=[[password-or-token]]"
- name: "docker"
  args:
  - "pull"
  - "[[image]]:[[tag]]"
- name: "docker"
  args:
  - "tag"
  - "[[image]]:[[tag]]"
  - "gcr.io/$PROJECT_ID/[[image]]:[[tag]]"
- name: "docker"
  args:
  - "push"
  - "gcr.io/$PROJECT_ID/[[image]]:[[tag]]"
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: gcloud
  args:
  - "run"
  - "deploy"
  - "[[service]]"
  - "--image=gcr.io/$PROJECT_ID/[[image]]:[[tag]]"
  - "--region=[[REGION]]"
  - "--platform=managed"

【讨论】:

是的,在浏览完所有文档后,我知道我必须按照上述步骤操作,但是在 cloudbuild.yaml 命令中如何操作?这是我第一次使用这些命令,所以不知道如何编写这些命令 我希望有人为 cloudbuild.yaml 文件编写(docker pull from DockerHub;docker tag for GCR;docker push to GCR))cloudbuild.yaml 文件的命令【参考方案2】:

您应该花一些时间来实践 docker。您可以像这样拉取图像并将其推送到不同的位置:

docker pull ubuntu
docker tag ubuntu gcr.io/.../ubuntu
docker push gcr.io/.../ubuntu

我不确定 Maven 是如何以及为何参与其中的。

【讨论】:

Maven 只是他们如何从 cloudbuild.yaml 中的 docker hub 中提取 maven 映像的示例 就像他们拉 maven 一样,我们也可以拉其他图像,而不是之后我应该如何将其推送到云运行 usig cloudbuild.yaml,这是一个问题 我认为您不需要将 maven(您的构建工具)发布到 Container Registry。您只需要构建应用程序的映像并推送它。我认为您需要在 Docker 上亲身体验一下,也许可以按照 Cloud Build 教程来掌握这些概念以及它们如何结合在一起。

以上是关于有啥方法可以从 docker hub 提取图像并使用 cloudbuild.yaml 部署到云运行的主要内容,如果未能解决你的问题,请参考以下文章

无法从Docker Hub中提取Docker中的Docker映像

无法提取 ansible 图像

ElasticBeanstalk - 无法从私有 Docker Hub 存储库中提取 docker 映像

将图像从公共 Docker Hub 拉取到 AWS Elastic Beanstalk 多个容器

Docker官方注册表(Docker Hub)URL

docker 镜像的大小和虚拟大小有啥区别?