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. Üretime 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 görüntüyle 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 görüntüyle 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

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 depo içindeki 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 tek tek görüntüleri depodan 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 tüm etiketler silinir.

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

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, etiketi 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, görüntü etiketini kaldırdığınızda boş alan kalmaz. Yalnızca etiket başvurusunun kendisi silinir.

Bildirim özeti ile 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ü tüm 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. Örnek:

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 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 true olarak değiştirin.

Uyarı

Aşağıdaki örnek betiği dikkatli kullanın; silinen görüntü verileri KURTARILAMAZ. Bildirim özetine göre görüntüleri çeken sistemleriniz varsa (görüntü adının aksine), bu betikleri çalıştırmamalısınız. Bildirim özetlerinin silinmesi, bu sistemlerin görüntüleri kayıt defterinizden çekmesini engeller. Bildirime göre çekmek yerine, önerilen en iyi uygulama 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 acr-helloworld anında iletme görüntüsü: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 acr-helloworld anında iletme görüntüsü: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 kayıt defteri içinde ve başvurduğunu tüm benzersiz katman verileriyle birlikte hala mevcuttur. Bu tür yalnız bırakılmış görüntüleri ve 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ürenin üzerindeki tüm etiketleri silmek veya belirtilen ad filtresiyle acr purge eşleştirmek 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 defterinde ilişkili etiketi olmayan 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 önizleme özelliğidir. Bekletme ilkesi yalnızca ilke yürürlüğe geçtikten sonra oluşturulan etiketlenmemiş bildirimler için geçerlidir.

Sonraki adımlar

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