Azure kapsayıcı kayıt defterinden görüntüleri otomatik olarak temizleme
Geliştirme iş akışının bir parçası olarak Bir Azure kapsayıcı kayıt defteri kullandığınızda, kayıt defteri kısa bir süre sonra gerekli olmayan görüntüler veya diğer yapıtlarla hızla dolabilir. Belirli bir süreden eski olan veya belirtilen ad filtresiyle eşleşen tüm etiketleri silmek isteyebilirsiniz. Birden çok yapıtı hızla silmek için, bu makalede isteğe bağlı veya zamanlanmış ACR Görevi olarak çalıştırabileceğiniz komut tanıtılıracr purge
.
Komut acr purge
şu anda GitHub'daki acr-cli deposundaki kaynak koddan oluşturulmuş bir genel kapsayıcı görüntüsünde ()mcr.microsoft.com/acr/acr-cli:0.5
dağıtılmıştır. acr purge
şu anda önizleme aşamasındadır.
Bu makaledeki ACR görev örneklerini çalıştırmak için Azure Cloud Shell'i veya Azure CLI'nın yerel yüklemesini kullanabilirsiniz. Yerel olarak kullanmak isterseniz, sürüm 2.0.76 veya üzeri gereklidir. Sürümü bulmak için az --version
komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.
Uyarı
acr purge
Komutunu 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), etiketlenmemiş görüntüleri temizlememelisiniz. Etiketlenmemiş görüntülerin 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.
Azure CLI komutlarını kullanarak tek görüntü etiketlerini veya bildirimlerini silmek istiyorsanız bkz . Azure Container Registry'de kapsayıcı görüntülerini silme.
Purge komutunu kullanma
acr purge
Kapsayıcı komutu, bir ad filtresiyle eşleşen ve belirtilen süreden daha eski olan bir depodaki etikete göre görüntüleri siler. Varsayılan olarak, temel alınan bildirimler ve katman verileri değil, yalnızca etiket başvuruları silinir. Komutun bildirimleri silme seçeneği de vardır.
Not
acr purge
özniteliğinin olarak ayarlandığı false
bir görüntü etiketini veya depoyu write-enabled
silmez. Bilgi için bkz . Azure kapsayıcı kayıt defterinde kapsayıcı görüntüsünü kilitleme.
acr purge
, bir ACR Görevinde kapsayıcı komutu olarak çalışacak şekilde tasarlanmıştır, böylece görevin çalıştığı kayıt defterinde otomatik olarak kimlik doğrulaması yapar ve orada eylemler gerçekleştirir. Bu makaledeki görev örnekleri, tam kapsayıcı görüntüsü komutu yerine komut diğer adını kullanıracr purge
.
Önemli
- komutunu yürütmek
acr purge
için standart komut şudur:az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --optional parameter' /dev/null
. - ACR Temizleme'yi kullanmak için tam
acr purge
komutu çalıştırmanızı öneririz. Örneğin, olarakacr purge --help
az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --help' /dev/null
komutunu çalıştırın.
komutunu çalıştırırken acr purge
en azından aşağıdakileri belirtin:
--filter
- Kayıt defterindeki görüntüleri filtrelemek için bir depo adı normal ifadesi ve etiket adı normal ifadesi . Örnekler:--filter "hello-world:.*"
depodakihello-world
tüm etiketleri eşleştirir,--filter "hello-world:^1.*"
depodanhello-world
başlayarak etiketlerle1
eşleşir ve--filter ".*/cache:.*"
ile biten/cache
depolardaki tüm etiketlerle eşleşir. Birden çok--filter
parametre de geçirebilirsiniz.--ago
- Görüntülerin silindiği süreyi belirtmek için Go stilinde bir süre dizesi . Süre, her biri bir birim soneki olan bir veya daha fazla ondalık sayıdan oluşan bir diziden oluşur. Geçerli zaman birimleri günler için "d", saat için "h" ve dakikalar için "m" içerir. Örneğin,--ago 2d3h6m
en son iki günden, 3 saat ve 6 dakika önce değiştirilmiş tüm filtrelenmiş görüntüleri seçer ve--ago 1.5h
en son 1,5 saatten fazla önce değiştirilmiş görüntüleri seçer.
acr purge
birkaç isteğe bağlı parametreyi destekler. Bu makaledeki örneklerde aşağıdaki ikisi kullanılmıştır:
--untagged
- İlişkili etiketleri olmayan tüm bildirimlerin (etiketsiz bildirimler) silindiğini belirtir. Bu parametre, zaten silinmiş olan etiketlere ek olarak etiketlenmemiş bildirimleri de siler. Bir bildirimi temizlemek için bildirimle ilişkili tüm etiketleri kaldırın; yalnızca o zaman kullanarak--untagged
ücretsiz etiket bildirimini temizleyebilirsiniz.--dry-run
- Hiçbir verinin silinmediğini belirtir, ancak çıkış, komutun bu bayrak olmadan çalıştırılmasıyla aynıdır. Bu parametre, korumak istediğiniz verileri yanlışlıkla silmediğinden emin olmak için temizleme komutunu test etmek için kullanışlıdır.--keep
- Silinecek etiketlerin en son x sayısının korunduğunu belirtir. En son etiketler, etiketin son değiştirme zamanına göre belirlenir.--concurrency
- Eşzamanlı olarak işlenmek üzere bir dizi temizleme görevi belirtir. Bu parametre sağlanmazsa varsayılan bir değer kullanılır.
Not
Filtre --untagged
, filtreye --ago
yanıt vermiyor.
Ek parametreler için komutunu çalıştırın acr purge --help
.
acr purge
, akışa alınan ve daha sonra almak üzere kaydedilen çalıştırma değişkenleri ve görev çalıştırma günlükleri de dahil olmak üzere ACR Görevleri komutlarının diğer özelliklerini destekler.
İsteğe bağlı görevde çalıştırma
Aşağıdaki örnek, isteğe bağlı olarak komutunu çalıştırmak acr purge
için az acr run komutunu kullanır. Bu örnek, kayıt defterimdeki hello-world
depoda 1 günden daha önce değiştirilmiş olan tüm görüntü etiketlerini ve bildirimleri ve etiketlenmemiş tüm bildirimleri siler. Kapsayıcı komutu bir ortam değişkeni kullanılarak geçirilir. Görev bir kaynak bağlamı olmadan çalışır.
# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
--untagged --ago 1d"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
/dev/null
Zamanlanmış görevde çalıştırma
Aşağıdaki örnek, günlük zamanlanmış ACR görevi oluşturmak için az acr task create komutunu kullanır. Görev, depoda hello-world
7 günden daha önce değiştirilmiş etiketleri temizler. Kapsayıcı komutu bir ortam değişkeni kullanılarak geçirilir. Görev bir kaynak bağlamı olmadan çalışır.
# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
--ago 7d"
az acr task create --name purgeTask \
--cmd "$PURGE_CMD" \
--schedule "0 0 * * *" \
--registry myregistry \
--context /dev/null
Zamanlayıcı tetikleyicisinin yapılandırıldığını görmek için az acr task show komutunu çalıştırın.
Çok sayıda etiketi ve bildirimi temizleme
Çok sayıda etiketin ve bildirimin temizlenmesi birkaç dakika veya daha uzun sürebilir. Binlerce etiketi ve bildirimi temizlemek için, komutun isteğe bağlı görev için varsayılan zaman aşımı süresi olan 600 saniyeden uzun veya zamanlanmış görev için 3600 saniye çalışması gerekebilir. Zaman aşımı süresi aşılırsa, etiketlerin ve bildirimlerin yalnızca bir alt kümesi silinir. Büyük ölçekli temizleme işleminin tamamlandığından emin olmak için parametresini --timeout
geçirerek değeri artırın.
Örneğin, aşağıdaki isteğe bağlı görev 3600 saniyelik bir zaman aşımı süresi (1 saat) ayarlar:
# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
--ago 1d --untagged"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
--timeout 3600 \
/dev/null
Örnek: Kayıt defterindeki birden çok deponun zamanlanmış temizlemesi
Bu örnek, bir kayıt defterindeki birden çok depoları düzenli aralıklarla temizlemek için kullanma acr purge
işleminde yol gösterir. Örneğin, ve samples/devimage2
depolarına görüntü samples/devimage1
gönderebilen bir geliştirme işlem hattınız olabilir. Dağıtımlarınız için geliştirme görüntülerini düzenli aralıklarla bir üretim deposuna aktardığınızdan artık geliştirme görüntülerine ihtiyacınız kalmaz. Haftalık olarak, önümüzdeki haftanın çalışmalarına samples/devimage1
hazırlık olarak ve samples/devimage2
depolarını temizlersiniz.
Temizlemenin önizlemesini görüntüleme
Verileri silmeden önce parametresini kullanarak --dry-run
isteğe bağlı temizleme görevi çalıştırmanızı öneririz. Bu seçenek, herhangi bir veri kaldırmadan komutun temizleyecekleri etiketleri ve bildirimleri görmenize olanak tanır.
Aşağıdaki örnekte, her depodaki filtre tüm etiketleri seçer. parametresi, --ago 0d
depolardaki filtrelerle eşleşen tüm yaşlardaki görüntülerle eşleşir. Seçim ölçütlerini senaryonuz için gerektiği gibi değiştirin. --untagged
parametresi, etiketlerin yanı sıra bildirimlerin de silindiğini gösterir. Kapsayıcı komutu, bir ortam değişkeni kullanılarak az acr run komutuna geçirilir.
# Environment variable for container command line
PURGE_CMD="acr purge \
--filter 'samples/devimage1:.*' --filter 'samples/devimage2:.*' \
--ago 0d --untagged --dry-run"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
/dev/null
Seçim parametreleriyle eşleşen etiketleri ve bildirimleri görmek için komut çıktısını gözden geçirin. komutu ile --dry-run
çalıştırıldığından hiçbir veri silinmez.
Örnek çıkış:
[...]
Deleting tags for repository: samples/devimage1
myregistry.azurecr.io/samples/devimage1:232889b
myregistry.azurecr.io/samples/devimage1:a21776a
Deleting manifests for repository: samples/devimage1
myregistry.azurecr.io/samples/devimage1@sha256:81b6f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e788b
myregistry.azurecr.io/samples/devimage1@sha256:3ded859790e68bd02791a972ab0bae727231dc8746f233a7949e40f8ea90c8b3
Deleting tags for repository: samples/devimage2
myregistry.azurecr.io/samples/devimage2:5e788ba
myregistry.azurecr.io/samples/devimage2:f336b7c
Deleting manifests for repository: samples/devimage2
myregistry.azurecr.io/samples/devimage2@sha256:8d2527cde610e1715ad095cb12bc7ed169b60c495e5428eefdf336b7cb7c0371
myregistry.azurecr.io/samples/devimage2@sha256:ca86b078f89607bc03ded859790e68bd02791a972ab0bae727231dc8746f233a
Number of deleted tags: 4
Number of deleted manifests: 4
[...]
Temizlemeyi zamanlama
Kuru çalıştırmayı doğruladıktan sonra temizleme işlemini otomatikleştirmek için zamanlanmış bir görev oluşturun. Aşağıdaki örnek, önceki temizleme komutunu çalıştırmak için Pazar günü saat 1:00 UTC'de haftalık bir görev zamanlar:
# Environment variable for container command line
PURGE_CMD="acr purge \
--filter 'samples/devimage1:.*' --filter 'samples/devimage2:.*' \
--ago 0d --untagged"
az acr task create --name weeklyPurgeTask \
--cmd "$PURGE_CMD" \
--schedule "0 1 * * Sun" \
--registry myregistry \
--context /dev/null
Zamanlayıcı tetikleyicisinin yapılandırıldığını görmek için az acr task show komutunu çalıştırın.
Sonraki adımlar
Azure Container Registry'de görüntü verilerini silmeye ilişkin diğer seçenekler hakkında bilgi edinin.
Görüntü depolama hakkında daha fazla bilgi için bkz . Azure Container Registry'de kapsayıcı görüntüsü depolama.