如何从 Google Container Registry 中彻底删除容器映像?
How can I cleanly remove a container image from the Google Container Registry?
我已使用 gcloud docker push
将容器映像推送到 Google 容器注册表。两个问题:
如何从注册表中彻底删除推送的容器映像? (我知道我可以删除图像的标签并使其无法再访问。)
图像带来了一堆 Docker 层。我想通过删除图像删除所有未使用的图层。
更新: 您现在可以直接从 UI.
中删除单个容器镜像
- 前往 Container Registry page.
- 您应该会看到一个容器映像列表。单击要删除的那个。
- Select一个或多个标签,点击删除按钮。
截至 2015 年 11 月: 目前无法从注册表中彻底删除单个容器映像。现在,基本上是全有或全无。 GCR 团队正在努力解决这个问题!
原答案:我想不出一个简单的方法来删除单个图像。您可以通过使用 gsutil rb gs://artifacts.<PROJECT-ID>.appspot.com
删除 Cloud Storage 存储桶来删除所有图像。您也可以使用存储浏览器并尝试删除单个部分 (https://console.developers.google.com/storage/browser/artifacts..appspot.com),但您必须知道每一层的 Docker 哈希值!
这可以通过 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),上面的命令是 运行。
一个粗略的脚本示例是 运行宁以下 post 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
A Github 操作 post 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
我已使用 gcloud docker push
将容器映像推送到 Google 容器注册表。两个问题:
如何从注册表中彻底删除推送的容器映像? (我知道我可以删除图像的标签并使其无法再访问。)
图像带来了一堆 Docker 层。我想通过删除图像删除所有未使用的图层。
更新: 您现在可以直接从 UI.
中删除单个容器镜像- 前往 Container Registry page.
- 您应该会看到一个容器映像列表。单击要删除的那个。
- Select一个或多个标签,点击删除按钮。
截至 2015 年 11 月: 目前无法从注册表中彻底删除单个容器映像。现在,基本上是全有或全无。 GCR 团队正在努力解决这个问题!
原答案:我想不出一个简单的方法来删除单个图像。您可以通过使用 gsutil rb gs://artifacts.<PROJECT-ID>.appspot.com
删除 Cloud Storage 存储桶来删除所有图像。您也可以使用存储浏览器并尝试删除单个部分 (https://console.developers.google.com/storage/browser/artifacts..appspot.com),但您必须知道每一层的 Docker 哈希值!
这可以通过 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),上面的命令是 运行。
一个粗略的脚本示例是 运行宁以下 post 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
A Github 操作 post 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