从 Google Container Registry 自动将新容器部署到 Google Cloud Compute Engine
Automatically deploy new container to Google Cloud Compute Engine from Google Container Registry
我有一个 docker 容器,我像 gcloud builds submit --tag gcr.io/<project-id>/<name>
一样推送到 GCR,当我将它部署到 GCE 实例上时,每次部署它都会创建一个新实例,我必须删除手动旧实例。问题是,有没有办法部署容器并强制 GCE 实例获取新容器?我需要的正是 GCE,而不是 Google Cloud 运行 或其他,因为它不是 HTTP 服务。
我使用 Deploy to Cloud Run
按钮从 Google 控制台部署容器
我发布此 Community Wiki
是为了提高知名度。评论区已经有几个不错的解决方案了,不过最后OP想用Cloud Run
.
首先我想澄清一些事情。
I have a docker container which I push to GCR like gcloud builds submit
gcloud builds submit
是使用 Google Cloud Build.
构建的命令
Cloud Build is a service that executes your builds on Google Cloud Platform infrastructure. Cloud Build can import source code from Cloud Storage, Cloud Source Repositories, GitHub, or Bitbucket, execute a build to your specifications, and produce artifacts such as Docker containers or Java archives.
在这个问题中,OP 指的是 Container Registry, however GCP recommends to use Artifact Registry,它很快将取代 Container Registry
。
从 Artifact Registry
推送和拉取图像在 Pushing and pulling images 文档中进行了说明。它可以通过 docker push
或 docker pull
命令完成,之前您必须标记图像并创建 Artifact Registry
.
在不同的 GCP 产品上部署
关于在 GCE
、GKE
和 Cloud Run
上的部署,这些是 GCP 产品,与每个产品都有很大不同。
GCE 是 IaaS
,您在其中指定资源量并维护所有软件的所有安装(您需要安装 Docker、Kubernetes、编程库等)。
GKE 就像 Hybrid
一样,因为你提到了你需要的资源量,但它被定制为 运行 容器。创建后,您已经拥有 docker、kubernetes 和 运行 容器所需的其他软件。
Cloud Run 是一款无服务器 GCP 产品,无需计算所需资源的数量,安装 software/libs,它是一个完全托管的无服务器平台。
当您想从 Artifact Registry / Container Registry
部署容器应用程序时,您正在创建另一个 VM(GCE 和 GKE)或新服务(云 运行)。
如果您想在同一个 VM 上部署新应用程序:
- 在 GCE 上,您需要使用 Docker 或 Kubernetes (Kubeadm) 拉取镜像并将其部署到该 VM 上。
- 在 GKE 上,您需要使用类似
的命令部署新的 deployment
kubectl create deployment test --image=<location>-docker.pkg.dev/<projectname>/<artifactRegistryName>/<imageName>
并删除旧的。
在 Cloud Run
中,您可以部署应用程序而无需担心资源或硬件,描述了哪些步骤 here. You can create revisions
for specific changes in the image. However Cloud Run
also allows CI/CD using GitHub
, BitBucket
or Cloud Source Repositories
. This process is also well described in GCP documentation - Continuous deployment
可能的解决方案:
- 编写一个 Cloudbuild.yaml 文件,在每个 CI/CD 管道中为您执行此操作 运行
- 在 GCE 上编写一个小应用程序,订阅由 Cloud Build 创建的 Pub/Sub 通知。然后您可以拉取新容器或启动新实例。
- 将
Cloud Run
与 CI/CD
结合使用。
根据 OP 的评论之一,选择的解决方案是将 Cloud Run
与 CI/CD
一起使用。
我有一个 docker 容器,我像 gcloud builds submit --tag gcr.io/<project-id>/<name>
一样推送到 GCR,当我将它部署到 GCE 实例上时,每次部署它都会创建一个新实例,我必须删除手动旧实例。问题是,有没有办法部署容器并强制 GCE 实例获取新容器?我需要的正是 GCE,而不是 Google Cloud 运行 或其他,因为它不是 HTTP 服务。
我使用 Deploy to Cloud Run
按钮从 Google 控制台部署容器
我发布此 Community Wiki
是为了提高知名度。评论区已经有几个不错的解决方案了,不过最后OP想用Cloud Run
.
首先我想澄清一些事情。
I have a docker container which I push to GCR like
gcloud builds submit
gcloud builds submit
是使用 Google Cloud Build.
Cloud Build is a service that executes your builds on Google Cloud Platform infrastructure. Cloud Build can import source code from Cloud Storage, Cloud Source Repositories, GitHub, or Bitbucket, execute a build to your specifications, and produce artifacts such as Docker containers or Java archives.
在这个问题中,OP 指的是 Container Registry, however GCP recommends to use Artifact Registry,它很快将取代 Container Registry
。
从 Artifact Registry
推送和拉取图像在 Pushing and pulling images 文档中进行了说明。它可以通过 docker push
或 docker pull
命令完成,之前您必须标记图像并创建 Artifact Registry
.
在不同的 GCP 产品上部署
关于在 GCE
、GKE
和 Cloud Run
上的部署,这些是 GCP 产品,与每个产品都有很大不同。
GCE 是 IaaS
,您在其中指定资源量并维护所有软件的所有安装(您需要安装 Docker、Kubernetes、编程库等)。
GKE 就像 Hybrid
一样,因为你提到了你需要的资源量,但它被定制为 运行 容器。创建后,您已经拥有 docker、kubernetes 和 运行 容器所需的其他软件。
Cloud Run 是一款无服务器 GCP 产品,无需计算所需资源的数量,安装 software/libs,它是一个完全托管的无服务器平台。
当您想从 Artifact Registry / Container Registry
部署容器应用程序时,您正在创建另一个 VM(GCE 和 GKE)或新服务(云 运行)。
如果您想在同一个 VM 上部署新应用程序:
- 在 GCE 上,您需要使用 Docker 或 Kubernetes (Kubeadm) 拉取镜像并将其部署到该 VM 上。
- 在 GKE 上,您需要使用类似 的命令部署新的
deployment
kubectl create deployment test --image=<location>-docker.pkg.dev/<projectname>/<artifactRegistryName>/<imageName>
并删除旧的。
在 Cloud Run
中,您可以部署应用程序而无需担心资源或硬件,描述了哪些步骤 here. You can create revisions
for specific changes in the image. However Cloud Run
also allows CI/CD using GitHub
, BitBucket
or Cloud Source Repositories
. This process is also well described in GCP documentation - Continuous deployment
可能的解决方案:
- 编写一个 Cloudbuild.yaml 文件,在每个 CI/CD 管道中为您执行此操作 运行
- 在 GCE 上编写一个小应用程序,订阅由 Cloud Build 创建的 Pub/Sub 通知。然后您可以拉取新容器或启动新实例。
- 将
Cloud Run
与CI/CD
结合使用。
根据 OP 的评论之一,选择的解决方案是将 Cloud Run
与 CI/CD
一起使用。