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

Azure Container Registry 'nizin boyutunu korumak için eski görüntü verilerini düzenli aralıklarla silmelisiniz. Üretime dağıtılan bazı kapsayıcı görüntüleri, daha uzun süreli depolama gerektirebilir, ancak diğerleri genellikle daha hızlı silinebilir. Örneğin, bir otomatik derleme ve test senaryosunda, kayıt defteriniz hiçbir şekilde dağıtılmayan görüntülerle hızla doldurabilir ve derleme ve test geçişini tamamladıktan sonra kısa bir süre sonra temizlenir.

Görüntü verilerini birçok farklı şekilde silebildiğinden, her silme işleminin depolama kullanımını nasıl etkilediğini anlamak önemlidir. Bu makalede, görüntü verilerini silmeye yönelik çeşitli yöntemler ele alınmaktadır:

  • Depoyusilme: tüm görüntüleri ve depo içindeki tüm benzersiz katmanları siler.
  • Etiketegöre Sil: bir görüntüyü, etiketi, görüntünün başvurduğu tüm benzersiz katmanları ve görüntüyle ilişkili diğer tüm etiketleri siler.
  • Bildirim özetinegöre Sil: bir görüntüyü, görüntü tarafından başvurulan 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, ilgili depolama alanı için hemen faturalandırmayı durduruyor. Ancak kayıt defteri, zaman uyumsuz bir işlem kullanarak ilişkili depolama alanını kurtarır. Kayıt defteri katmanları temizlerken ve güncelleştirilmiş depolama kullanımını gösterirken biraz zaman alır.

Depoyu Sil

Bir deponun silinmesi, tüm Etiketler, benzersiz katmanlar ve bildirimler dahil olmak üzere depodaki tüm görüntüleri siler. Bir depoyu sildiğinizde, bu depodaki benzersiz katmanlara başvuran görüntüler tarafından kullanılan depolama alanını kurtarmanız gerekir.

Aşağıdaki Azure CLı komutu, "ACR-HelloWorld" deposunu ve depo içindeki tüm etiketleri ve bildirimleri siler. Silinen bildirimlerde başvurulan katmanlara kayıt defterindeki diğer görüntüler tarafından başvurulmazsa, katman verileri de silinir ve depolama alanı kurtarılabilir.

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

Etikete göre silme

Silme işleminde depo adını ve etiketini belirterek depodan tek tek görüntüleri silebilirsiniz. Etikete göre silerek görüntüdeki benzersiz katmanlar (kayıt defterindeki diğer görüntüler tarafından paylaşılmaz) tarafından kullanılan depolama alanını kurtarabilirsiniz.

Etikete göre silmek için az acr repository delete kullanın ve parametresinde görüntü adını --image 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ü silebilirsiniz:

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 işlemi bir etiketin silinmesiyle karıştırılmamalıdır (etiketlemeden kaldırılma). Azure CLI komutu az acr repository untag komutunu kullanarak bir etiketi silebilirsiniz. Bir görüntünün etiketlerini çıkararak bildirim ve katman verileri kayıt defterinde kalır. Yalnızca etiket başvurusu silinir.

Bildirim özetine göre silme

Bildirim özeti bir, hiçbiri veya birden çok etiketle ilişkilendirililebilir. Özetle sildikten sonra, görüntüye özgü katmanlar için katman verileri gibi bildirim tarafından başvurulan tüm etiketler silinir. Paylaşılan katman verileri silinmez.

Özete göre silmek için öncelikle silmek istediğiniz görüntüleri içeren deponun bildirim özetlerini listelenin. Örnek:

az acr repository show-manifests --name myregistry --repository acr-helloworld
[
  {
    "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 o görüntüye özgü katman verileri gibi kayıt defterinden silinir. Bir bildirim birden çok etiketle ilişkili ise, ilişkili tüm etiketler de silinir.

Zaman damgasına göre özetleri silme

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

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

az acr repository show-manifests --name <acrName> --repository <repositoryName> \
--orderby time_asc -o tsv --query "[?timestamp < '2019-04-05'].[digest, timestamp]"

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

Uyarı

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

#!/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 repository show-manifests --name $REGISTRY --repository $REPOSITORY \
    --orderby time_asc --query "[?timestamp < '$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 repository show-manifests --name $REGISTRY --repository $REPOSITORY \
   --orderby time_asc --query "[?timestamp < '$TIMESTAMP'].[digest, timestamp]" -o tsv
fi

Etiketsiz 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ü itildiğinde, daha önce ertelenen görüntünün etiketi çıkarılır ve yalnız (veya "dalgalı") bir görüntü elde eder. Daha önce ertelenen görüntünün bildirimi ve katman verileri kayıt defterinde kalır. Aşağıdaki olay dizisini düşünün:

  1. en son etiketine sahip acr-helloworld görüntüsünü itme:docker push myregistry.azurecr.io/acr-helloworld:latest

  2. acr-helloworld deposu için bildirimleri kontrol edin:

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

  4. İlet resmi ACR-HelloWorld WITH Tag latest: docker push myregistry.azurecr.io/acr-helloworld:latest

  5. Depo ACR-HelloWorld için bildirimleri denetle:

    az acr repository show-manifests --name myregistry --repository acr-helloworld
    
    [
      {
        "digest": "sha256:7ca0e0ae50c95155dbb0e380f37d7471e98d2232ed9e31eece9f9fb9078f2728",
        "tags": [
          "latest"
        ],
        "timestamp": "2018-07-11T21:38:35.9170967Z"
      },
      {
        "digest": "sha256:d2bdc0c22d78cde155f53b4092111d7e13fe28ebf87a945f94b19c248000ceec",
        "tags": [],
        "timestamp": "2018-07-11T21:32:21.1400513Z"
      }
    ]
    

Sıradaki son adımın çıktısında görebileceğiniz gibi, artık özelliği boş bir liste olan bir yalnız bırakılmış bildirim vardır "tags" . Bu bildirim, başvurduğu benzersiz katman verileriyle birlikte kayıt defteri içinde de bulunur. 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 temizle

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

  • acr purgeBelirli bir süreden daha eski olan tüm etiketleri silmek veya belirtilen bir ad filtresiyle eşleştirmek için kapsayıcı komutunu çalıştıran BIR ACR görevi oluşturun. acr purgeEtiketlenmemiş bildirimleri silmek için isteğe bağlı olarak yapılandırın.

    acr purgeKapsayıcı komutu şu anda önizleme aşamasındadır. Daha fazla bilgi için bkz. Azure Container Registry 'den görüntüleri otomatik olarak temizleme.

  • Etiketlenmemiş bildirimleri yönetmek için isteğe bağlı olarak her kayıt defteri için bir bekletme ilkesi ayarlayın. Bir bekletme ilkesini etkinleştirdiğinizde, ilişkili etiketi olmayan kayıt defterindeki görüntü bildirimleri ve temel alınan katman verileri bir ayarlanan dönemden 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 girdikten sonra oluşturulan etiketlenmemiş 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 kapsayıcı görüntü depolaması.