Aracılığıyla paylaş


Azure Container Registry'deki kapsayıcı görüntülerini silme

Azure kapsayıcı kayıt defterinizin boyutunu korumak için eski görüntü verilerini düzenli aralıklarla silmeniz gerekir. Üretim ortamına dağıtılan bazı kapsayıcı görüntüleri daha uzun süreli depolama gerektirse de, diğerleri genellikle daha hızlı silinebilir. Örneğin, otomatik derleme ve test senaryosunda, kayıt defteriniz hiç dağıtılmayabilecek görüntülerle hızla dolabilir ve derleme ve test geçişi tamamlandıktan kısa süre sonra temizlenebilir.

Görüntü verilerini birkaç farklı yolla silebildiğiniz için, her silme işleminin depolama kullanımını nasıl etkilediğini anlamak önemlidir. Bu makale, görüntü verilerini silmeye yönelik çeşitli yöntemleri kapsar:

  • Depoyu silme: Depodaki tüm görüntüleri ve tüm benzersiz katmanları siler.
  • Etikete göre sil: Bir görüntüyü, etiketi, görüntü tarafından başvuruda bulunan tüm benzersiz katmanları ve resimle ilişkili diğer tüm etiketleri siler.
  • Bildirim özetiyle silme: Bir görüntüyü, görüntü tarafından başvuruda bulunan tüm benzersiz katmanları ve resimle ilişkili tüm etiketleri siler.

Bu kavramlara giriş için bkz . Kayıt defterleri, depolar ve görüntüler hakkında.

Not

Görüntü verilerini sildikten sonra, Azure Container Registry ilişkili depolama alanı için faturalandırmayı hemen durdurur. Ancak, kayıt defteri zaman uyumsuz bir işlem kullanarak ilişkili depolama alanını kurtarır. Kayıt defterinin katmanları temizlemesi ve güncelleştirilmiş depolama kullanımını göstermesi biraz zaman alır.

Depo silme

Bir depo silindiğinde tüm etiketler, benzersiz katmanlar ve bildirimler de dahil olmak üzere depodaki tüm görüntüler silinir. Bir depoyu sildiğinizde, bu depodaki benzersiz katmanlara başvuran görüntüler tarafından kullanılan depolama alanını kurtarırsınız.

Aşağıdaki Azure CLI komutu "acr-helloworld" deposunu ve depodaki tüm etiketleri ve bildirimleri siler. Silinen bildirimler tarafından başvuruda bulunan katmanlara kayıt defterindeki diğer görüntüler tarafından başvurulmazsa, katman verileri de silinir ve depolama alanı kurtarılır.

 az acr repository delete --name myregistry --repository acr-helloworld

Etikete göre sil

Silme işleminde depo adını ve etiketini belirterek bir depodan tek tek görüntüleri silebilirsiniz. Etikete göre sildiğinizde, görüntüdeki benzersiz katmanlar (kayıt defterindeki diğer görüntüler tarafından paylaşılmayan katmanlar) tarafından kullanılan depolama alanını kurtarırsınız.

Etikete göre silmek için az acr repository delete komutunu kullanın ve parametresinde --image görüntü adını belirtin. Görüntüye özgü tüm katmanlar ve görüntüyle ilişkili diğer etiketler silinir.

Örneğin, "myregistry" kayıt defterinden "acr-helloworld:latest" görüntüsünü silme:

az acr repository delete --name myregistry --image acr-helloworld:latest
This operation will delete the manifest 'sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108' and all the following images: 'acr-helloworld:latest', 'acr-helloworld:v3'.
Are you sure you want to continue? (y/n):

İpucu

Etikete göre silme , etiket silme (etiket kaldırma) ile karıştırılmamalıdır. Az acr repository untag Azure CLI komutuyla etiketi silebilirsiniz. Bildirim ve katman verileri kayıt defterinde kaldığından, bir görüntünün etiketini kaldırdığınızda alan boşaltılmaz. Yalnızca etiket başvurusunun kendisi silinir.

Bildirim özetiyle silme

Bildirim özeti bir, hiçbiri veya birden çok etiketle ilişkilendirilebilir. Özete göre sildiğinizde bildirim tarafından başvuruda bulunan tüm etiketler, görüntüye özgü katmanlar için katman verileri gibi silinir. Paylaşılan katman verileri silinmez.

Özete göre silmek için, önce silmek istediğiniz görüntüleri içeren deponun bildirim özetlerini listeleyin. Örneğin:

az acr manifest list-metadata --name acr-helloworld --registry myregistry
[
  {
    "digest": "sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108",
    "tags": [
      "latest",
      "v3"
    ],
    "timestamp": "2018-07-12T15:52:00.2075864Z"
  },
  {
    "digest": "sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57",
    "tags": [
      "v2"
    ],
    "timestamp": "2018-07-12T15:50:53.5372468Z"
  }
]

Ardından, az acr repository delete komutunda silmek istediğiniz özeti belirtin. Komut biçimi şu şekildedir:

az acr repository delete --name <acrName> --image <repositoryName>@<digest>

Örneğin, önceki çıkışta listelenen son bildirimi silmek için ("v2" etiketiyle):

az acr repository delete --name myregistry --image acr-helloworld@sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57
This operation will delete the manifest 'sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57' and all the following images: 'acr-helloworld:v2'.
Are you sure you want to continue? (y/n): 

Görüntü acr-helloworld:v2 , bu görüntüye özgü tüm katman verileri gibi kayıt defterinden silinir. Bir bildirim birden çok etiketle ilişkilendirildiyse, ilişkili tüm etiketler de silinir.

Özetleri zaman damgasına göre silme

Bir deponun veya kayıt defterinin boyutunu korumak için belirli bir tarihten eski bildirim özetlerini düzenli aralıklarla silmeniz gerekebilir.

Aşağıdaki Azure CLI komutu, belirtilen zaman damgasından daha eski bir depodaki tüm bildirim özetlerini artan sırada listeler. ve <repositoryName> değerlerini ortamınıza uygun değerlerle değiştirin<acrName>. Zaman damgası, bu örnekte olduğu gibi tam bir tarih-saat ifadesi veya tarih olabilir.

az acr manifest list-metadata --name <repositoryName> --registry <acrName> \
    --orderby time_asc -o tsv --query "[?lastUpdateTime < '2019-04-05'].[digest, lastUpdateTime]"

Eski bildirim özetlerini tanımladıktan sonra, belirtilen zaman damgasından daha eski bildirim özetlerini silmek için aşağıdaki Bash betiğini çalıştırabilirsiniz. Azure CLI ve xargs gerektirir. Betik varsayılan olarak silme işlemi gerçekleştirmez. Görüntü silmeyi ENABLE_DELETE etkinleştirmek için değerini olarak true değiştirin.

Uyarı

Aşağıdaki örnek betiği dikkatli kullanın; silinen görüntü verileri KURTARıLAMAZ. Bildirim özetine göre görüntü çeken sistemleriniz varsa (görüntü adının aksine), bu betikleri çalıştırmamalısınız. Bildirim özetlerinin silinmesi, bu sistemlerin kayıt defterinizdeki görüntüleri çekmesini engeller. Bildirime göre çekmek yerine, önerilen en iyi yöntem olan benzersiz bir etiketleme şemasını benimsemeyi göz önünde bulundurun.

#!/bin/bash

# WARNING! This script deletes data!
# Run only if you do not have systems
# that pull images via manifest digest.

# Change to 'true' to enable image delete
ENABLE_DELETE=false

# Modify for your environment
# TIMESTAMP can be a date-time string such as 2019-03-15T17:55:00.
REGISTRY=myregistry
REPOSITORY=myrepository
TIMESTAMP=2019-04-05  

# Delete all images older than specified timestamp.

if [ "$ENABLE_DELETE" = true ]
then
    az acr manifest list-metadata --name $REPOSITORY --registry $REGISTRY \
    --orderby time_asc --query "[?lastUpdateTime < '$TIMESTAMP'].digest" -o tsv \
    | xargs -I% az acr repository delete --name $REGISTRY --image $REPOSITORY@% --yes
else
    echo "No data deleted."
    echo "Set ENABLE_DELETE=true to enable deletion of these images in $REPOSITORY:"
    az acr manifest list-metadata --name $REPOSITORY --registry $REGISTRY \
   --orderby time_asc --query "[?lastUpdateTime < '$TIMESTAMP'].[digest, lastUpdateTime]" -o tsv
fi

Etiketlenmemiş görüntüleri silme

Bildirim özeti bölümünde belirtildiği gibi, var olan bir etiketi kullanarak değiştirilmiş bir görüntüyü göndermek, daha önce gönderilen görüntünün etiketini kaldırarak yalnız bırakılmış (veya "sallanan") bir görüntüyle sonuçlanır. Daha önce gönderilen görüntünün bildirimi ve katman verileri kayıt defterinde kalır. Aşağıdaki olay dizisini göz önünde bulundurun:

  1. En son etikete sahip anında iletme görüntüsü acr-helloworld:docker push myregistry.azurecr.io/acr-helloworld:latest

  2. acr-helloworld deposu için bildirimleri denetleyin:

    az acr manifest list-metadata --name acr-helloworld --registry myregistry
    
    
    [
      {
        "digest": "sha256:d2bdc0c22d78cde155f53b4092111d7e13fe28ebf87a945f94b19c248000ceec",
        "tags": [
          "latest"
        ],
        "timestamp": "2018-07-11T21:32:21.1400513Z"
      }
    ]
    
  3. acr-helloworld Dockerfile dosyasını değiştirme

  4. En son etikete sahip anında iletme görüntüsü acr-helloworld:docker push myregistry.azurecr.io/acr-helloworld:latest

  5. acr-helloworld deposu için bildirimleri denetleyin:

    az acr manifest list-metadata --name acr-helloworld --registry myregistry
    
    [
      {
     "architecture": "amd64",
     "changeableAttributes": {
       "deleteEnabled": true,
       "listEnabled": true,
       "quarantineDetails": "{\"state\":\"Scan Passed\",\"link\":\"https://aka.ms/test\",\"scanner\":\"Azure Security Monitoring-Qualys Scanner\",\"result\":{\"version\":\"2020-05-13T00:23:31.954Z\",\"summary\":[{\"severity\":\"High\",\"count\":2},{\"severity\":\"Medium\",\"count\":0},{\"severity\":\"Low\",\"count\":0}]}}",
       "quarantineState": "Passed",
       "readEnabled": true,
       "writeEnabled": true
     },
     "configMediaType": "application/vnd.docker.container.image.v1+json",
     "createdTime": "2020-05-16T04:25:14.3112885Z",
     "digest": "sha256:eef2ef471f9f9d01fd2ed81bd2492ddcbc0f281b0a6e4edb700fbf9025448388",
     "imageSize": 22906605,
     "lastUpdateTime": "2020-05-16T04:25:14.3112885Z",
     "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
     "os": "linux",
     "timestamp": "2020-05-16T04:25:14.3112885Z"
      }
    ]
    

Bir görüntü etiketsiz olduğunda etiketler dizisi meta verilerden kaldırılır. Bu bildirim, başvuruda bulunduğu tüm benzersiz katman verileriyle birlikte kayıt defteri içinde hala mevcuttur. Bu tür yalnız bırakılmış görüntüleri ve bunların katman verilerini silmek için bildirim özetine göre silmeniz gerekir.

Etiketleri ve bildirimleri otomatik olarak temizleme

Azure Container Registry, etiketleri ve bildirimleri ve bunların ilişkili benzersiz katman verilerini kaldırmak için aşağıdaki otomatik yöntemleri sağlar:

  • Belirli bir süreden eski olan veya belirtilen ad filtresiyle acr purge eşleşen tüm etiketleri silmek için kapsayıcı komutunu çalıştıran bir ACR görevi oluşturun. İsteğe bağlı olarak etiketlenmemiş bildirimleri silmek için yapılandırın acr purge .

    Kapsayıcı acr purge komutu şu anda önizleme aşamasındadır. Daha fazla bilgi için bkz . Azure kapsayıcı kayıt defterinden görüntüleri otomatik olarak temizleme.

  • İsteğe bağlı olarak, etiketlenmemiş bildirimleri yönetmek için her kayıt defteri için bir bekletme ilkesi ayarlayın. Bekletme ilkesini etkinleştirdiğinizde, kayıt defterindeki ilişkili etiket içermeyen görüntü bildirimleri ve temel alınan katman verileri belirli bir süre sonra otomatik olarak silinir.

    Bekletme ilkesi şu anda Premium kapsayıcı kayıt defterlerinin bir önizleme özelliğidir. Bekletme ilkesi yalnızca ilke yürürlüğe geçtikten sonra oluşturulan etiketsiz bildirimler için geçerlidir.

Sonraki adımlar

Azure Container Registry'de görüntü depolama hakkında daha fazla bilgi için bkz . Azure Container Registry'de kapsayıcı görüntüsü depolama.