【问题标题】:How can I cleanly remove a container image from the Google Container Registry?如何从 Google Container Registry 中彻底删除容器映像?
【发布时间】:2015-11-17 11:27:11
【问题描述】:

我已使用 gcloud docker push 将容器映像推送到 Google 容器注册表。两个问题:

如何从注册表中彻底删除推送的容器映像? (我知道我可以删除图像的标签并使其不再可访问。)

一个镜像会带来一堆 Docker 层。我想通过图像删除来删除所有未使用的图层。

【问题讨论】:

标签: docker google-compute-engine gcloud google-container-registry


【解决方案1】:

更新:您现在可以直接从 UI 中删除单个容器图像。

  1. 转到Container Registry page
  2. 您应该会看到一个容器图像列表。单击要删除的那个。
  3. 选择一个或多个标签,然后单击删除按钮。

截至 2015 年 11 月:目前无法从注册表中彻底删除单个容器映像。现在,基本上是全有或全无。 GCR 团队正在为此努力!

原答案:我想不出删除单个图像的简单方法。您可以通过使用gsutil rb gs://artifacts.<PROJECT-ID>.appspot.com 删除 Cloud Storage 存储分区来删除所有图像。您也可以使用存储浏览器并尝试删除单个部分 (https://console.developers.google.com/storage/browser/artifacts..appspot.com),但您必须知道每一层的 Docker 哈希!

【讨论】:

  • 谢谢@sandeep-dinesh。我会留下这个问题然后打开也许有人稍后会在实施时发布解决方案。
  • 刚刚更新了我的答案,您现在可以从 UI 中删除单个图像。
  • 现在看起来很棒。我将进行一些测试,看看它是如何工作的。谢谢!
【解决方案2】:

这可以通过 Gcloud 完成,这意味着它可以从 CLI 或代码管道中完成(比如在 CD 末尾)。

作为documented by Google,您可以收集所有未标记图像的列表:

gcloud container images list-tags  [HOSTNAME]/[PROJECT-ID]/[IMAGE] --filter='-tags:*' --format="get(digest)" --limit=$BIG_NUMBER

然后删除一张图片:

gcloud container images delete  [HOSTNAME]/[PROJECT-ID]/[IMAGE]@DIGEST --quiet

上面的命令是针对第一个命令的每个输出(DIGEST)运行的。

一个粗略的脚本示例将运行以下帖子 gcloud auth:

gcloud container images list-tags gcr.io/myProject/myApp --filter='-tags:*' --format="get(digest)" --limit=10 > tags && while read p; do gcloud container images delete "gcr.io/myProject/myApp@$p" --quiet; done < tags

Github 操作发布 CD 映像清理任务如下所示:

    needs: [CI, Build_myApp]
    runs-on: ubuntu-latest
    steps:
      - name: 'Authenticate to Gcloud'
        uses: google-github-actions/setup-gcloud@master
        with:
          project_id: myProject
          service_account_email: myServiceAccount@myProject.iam.gserviceaccount.com
          service_account_key: ${{ secrets.CONTAINER_ADMIN_NP_SA }}
          export_default_credentials: true
      - name: 'Cleanup untagged images in nonprod'
        run: gcloud container images list-tags gcr.io/myProject/myApp --filter='-tags:*' --format="get(digest)" --limit=10 > tags && while read p; do gcloud container images delete "gcr.io/myProject/myApp@$p" --quiet; done < tags

【讨论】:

  • 很好的答案!我有 80 个没有标签的容器,所以脚本找不到容器。你能帮我用一个相同类型的脚本吗?我首先可以用一个标签来标记所有容器条目,例如“准备删除”?谢谢
猜你喜欢
  • 2015-10-10
  • 2020-09-11
  • 1970-01-01
  • 2016-02-13
  • 2017-11-09
  • 2016-02-20
  • 2022-11-07
  • 2016-05-31
  • 2017-04-18
相关资源
最近更新 更多