Google Cloud Build - 如何在 VM 上修剪 docker 图像?
Google Cloud Build - How to prune docker images on VM?
我正在使用 Google Cloud Platform with Cloud Build 和 cloudbuild.yaml 进行软件部署。目标 VM 始终具有 Google 容器优化 OS (COS)。
我们做的基本事情是用新容器更新 运行 docker 容器。
- name: 'gcr.io/cloud-builders/gcloud'
args: ['compute','instances','update-container','my-vm-id','--zone','europe-west3-c','--container-restart-policy=always','--container-image=gcr.io/cloud-02/my-vm-id','--container-mount-host-path=host-path=/var/extdata,mount-path=/var/extdata,mode=rw']
但在这种情况下,旧的 docker 图像保留在主机虚拟机上。我可以使用 docker 图像列表将它们列在主机虚拟机上。由于图像在 /var/lib/docker 中,文件是有状态的并且在重启后不会消失。
所以,我不明白,我如何在部署过程中修剪主机虚拟机上的 docker 图像文件?
阅读您的问题,您可能需要使用这些步骤来 Creating custom build steps。
在此页面中说明如何使用 cloudbuild.yaml 执行自定义步骤,例如 运行 脚本。
您可以部署新映像,稍后根据您的偏好执行 docker run
命令
问候。
解决方案
我找到了完成这项任务的方法。我正在使用 add-metadata to add a startup-script 到虚拟机的 meta-header。如果在上一步中将 startup-script 克隆到管道中,则可以将其放入存储库。在我的例子中,startup-script 可以在 git 文件夹 /build/compute-engine 中找到。 /workdir 是云构建工作管道的默认路径。
现在每次触发构建时都会执行任务。
cloudbuild.yaml:
- name: 'gcr.io/cloud-builders/gcloud'
args: ['compute','instances','add-metadata','my-vm-id','--zone','europe-west3-c','--metadata-from-file=startup-script=/workspace/build/compute-engine/startup-vm.bash']
startup-vm.bash:
#! /bin/bash
/usr/bin/docker image prune -a -f
如果您不想等到 VM 重新启动进行修剪,另一种处理方法是:通过 gcloud
和 ssh
将 docker
命令发送到 VM。例如,在我的 CI/D 管道中部署新图像后立即修剪旧图像:
gcloud compute instances update-container <instance-name> --zone <zone> --container-image <artifact-registry-domain>/<repo>/<image-name>:<version>
其次是:
gcloud compute config-ssh
gcloud compute ssh <instance-name> --zone <zone> --command "docker image prune -af"
向 Steve for 的回答致敬。
我正在使用 Google Cloud Platform with Cloud Build 和 cloudbuild.yaml 进行软件部署。目标 VM 始终具有 Google 容器优化 OS (COS)。
我们做的基本事情是用新容器更新 运行 docker 容器。
- name: 'gcr.io/cloud-builders/gcloud'
args: ['compute','instances','update-container','my-vm-id','--zone','europe-west3-c','--container-restart-policy=always','--container-image=gcr.io/cloud-02/my-vm-id','--container-mount-host-path=host-path=/var/extdata,mount-path=/var/extdata,mode=rw']
但在这种情况下,旧的 docker 图像保留在主机虚拟机上。我可以使用 docker 图像列表将它们列在主机虚拟机上。由于图像在 /var/lib/docker 中,文件是有状态的并且在重启后不会消失。
所以,我不明白,我如何在部署过程中修剪主机虚拟机上的 docker 图像文件?
阅读您的问题,您可能需要使用这些步骤来 Creating custom build steps。
在此页面中说明如何使用 cloudbuild.yaml 执行自定义步骤,例如 运行 脚本。
您可以部署新映像,稍后根据您的偏好执行 docker run
命令
问候。
解决方案
我找到了完成这项任务的方法。我正在使用 add-metadata to add a startup-script 到虚拟机的 meta-header。如果在上一步中将 startup-script 克隆到管道中,则可以将其放入存储库。在我的例子中,startup-script 可以在 git 文件夹 /build/compute-engine 中找到。 /workdir 是云构建工作管道的默认路径。
现在每次触发构建时都会执行任务。
cloudbuild.yaml:
- name: 'gcr.io/cloud-builders/gcloud'
args: ['compute','instances','add-metadata','my-vm-id','--zone','europe-west3-c','--metadata-from-file=startup-script=/workspace/build/compute-engine/startup-vm.bash']
startup-vm.bash:
#! /bin/bash
/usr/bin/docker image prune -a -f
如果您不想等到 VM 重新启动进行修剪,另一种处理方法是:通过 gcloud
和 ssh
将 docker
命令发送到 VM。例如,在我的 CI/D 管道中部署新图像后立即修剪旧图像:
gcloud compute instances update-container <instance-name> --zone <zone> --container-image <artifact-registry-domain>/<repo>/<image-name>:<version>
其次是:
gcloud compute config-ssh
gcloud compute ssh <instance-name> --zone <zone> --command "docker image prune -af"
向 Steve for