簡體   English   中英

如何從 Google Container Registry 中徹底刪除容器映像?

[英]How can I cleanly remove a container image from the Google Container Registry?

我已經使用gcloud docker push將容器鏡像推送到 Google Container Registry。 兩個問題:

如何從注冊表中徹底刪除推送的容器鏡像? (我知道我可以刪除圖像的標簽並使其無法再訪問。)

圖像帶來了一堆 Docker 層。 我想刪除所有未使用的圖層並刪除圖像。

更新:您現在可以直接從 UI 刪除單個容器圖像。

  1. 轉至Container Registry 頁面
  2. 您應該會看到一個容器鏡像列表。 單擊要刪除的那個。 容器注冊表
  3. 選擇一個或多個標簽,然后單擊刪除按鈕。 選擇和刪除圖像

截至 2015 年 11 月:目前無法從注冊表中干凈地刪除單個容器映像。 現在,它基本上是全有或全無。 GCR 團隊正在為此努力!

原始答案:我想不出一種簡單的方法來刪除單個圖像。 您可以通過使用gsutil rb gs://artifacts.<PROJECT-ID>.appspot.com刪除 Cloud Storage 存儲gsutil rb gs://artifacts.<PROJECT-ID>.appspot.com來刪除所有圖像。 您還可以使用存儲瀏覽器並嘗試刪除各個部分(https://console.developers.google.com/storage/browser/artifacts ..appspot.com),但您必須知道每一層的 Docker 哈希值!

這可以通過 Gcloud 完成,這意味着它可以從 CLI 或在代碼管道中完成(比如在 CD 的末尾)。

正如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

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

PROJECT="project"
REGISTRY="registry"

while true; do
  echo "\n"
  DIGEST=$(gcloud container images list-tags gcr.io/$PROJECT/$REGISTRY --format="get(digest)" --limit 1)
  if [ "$DIGEST" = "" ]; then
    break;
  fi  
  gcloud container images delete gcr.io/$PROJECT/$REGISTRY@$DIGEST --force-delete-tags --quiet
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM