如何从Google容器注册表中干净地删除容器图像?

Gab*_*vay 5 google-compute-engine docker gcloud google-container-registry

我已将容器图像gcloud docker push用于Google容器注册表.两个问题:

如何从注册表中干净地删除推送的容器图像?(我知道我可以删除图像的标签,使其不再可访问.)

图像带来了一堆Docker图层.我想删除所有未使用的图层并删除图像.

San*_*esh 8

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

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

截至2015年11月:目前无法从注册表中干净地删除单个容器图像.现在,它基本上是全有或全无.GCR团队正致力于此!

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


Jak*_*son 8

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

根据Google 的记录,您可以通过以下方式收集所有未标记图像的列表:

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

然后使用以下命令删除图像:

gcloud container images delete  [HOSTNAME]/[PROJECT-ID]/[IMAGE]@DIGEST --quiet
Run Code Online (Sandbox Code Playgroud)

其中,针对第一个命令的每个输出 (DIGEST) 运行上述命令。

一个粗略的脚本示例将运行以下 gcloud 身份验证:

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
Run Code Online (Sandbox Code Playgroud)

CD 映像清理任务后的 Github 操作如下所示:

    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

Run Code Online (Sandbox Code Playgroud)