【问题标题】:Google Cloud Build - How to prune docker images on VM?Google Cloud Build - 如何修剪 VM 上的 docker 映像?
【发布时间】:2020-01-17 03:24:51
【问题描述】:

我将 Google Cloud Platform 与 Cloud Build 和 cloudbuild.yaml 一起用于软件部署。目标 VM 始终具有 Google Container Optimized 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 映像仍保留在 Host-VM 上。我可以使用 docker 镜像列表在 Host-VM 上列出它们。由于图像位于 /var/lib/docker 中,因此文件是有状态的,并且在重新启动后不会消失。

所以,我不明白,如何在部署过程中修剪 Host-VM 上的 docker 映像文件?

【问题讨论】:

    标签: google-cloud-platform google-cloud-build


    【解决方案1】:

    解决方案

    我找到了完成这项任务的方法。我正在使用add-metadatastartup-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']
    

    启动-vm.bash:

    #! /bin/bash
    /usr/bin/docker image prune -a -f
    

    【讨论】:

      【解决方案2】:

      如果您不想等到 VM 重新启动进行修剪,另一种方法是:通过 gcloudsshdocker 命令发送到 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 的帽子提示 this 回答。

      【讨论】:

        【解决方案3】:

        阅读您的问题,可能需要使用这些步骤来Creating custom build steps

        在此页面中说明如何使用 cloudbuild.yaml 执行自定义步骤,例如运行脚本。

        您可以部署新映像,然后根据您的偏好执行docker run 命令

        问候。

        【讨论】:

        • 发布答案时,请在答案中包含所有信息以及链接作为参考。链接中断、被删除等。答案应该是独立的,不需要外部访问即可获得答案。您的帖子不是对所提问题的回答,应该是评论。 stackoverflow.com/help/how-to-answer
        猜你喜欢
        • 2021-05-14
        • 2021-12-02
        • 2018-11-12
        • 1970-01-01
        • 1970-01-01
        • 2019-12-02
        • 2020-09-11
        • 2021-05-24
        • 2021-03-07
        相关资源
        最近更新 更多