Secara otomatis menghapus citra dari registri kontainer Azure

Saat Anda menggunakan registri kontainer Azure sebagai bagian dari alur kerja pengembangan, registri dapat dengan cepat terisi dengan citra atau artefak lain yang tidak diperlukan setelah beberapa saat. Anda mungkin ingin menghapus semua tag yang lebih lama dari durasi tertentu atau cocok dengan filter nama tertentu. Untuk menghapus beberapa artefak dengan cepat, artikel ini memperkenalkan perintah acr purge yang dapat Anda jalankan sebagai Tugas ACR sesuai permintaan atau terjadwal.

Perintah acr purge saat ini didistribusikan dalam gambar penampung publik (mcr.microsoft.com/acr/acr-cli:0.5), dibuat dari kode sumber di repo acr-cli di GitHub. acr purge saat ini sedang dalam pratinjau.

Anda dapat menggunakan Azure Cloud Shell atau penginstalan lokal Azure CLI untuk menjalankan contoh tugas ACR di artikel ini. Jika Anda ingin menggunakannya secara lokal, diperlukan versi 2.0.76 atau yang lebih baru. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.

Peringatan

Gunakan perintah acr purge dengan hati-hati--data citra yang dihapus TIDAK DAPAT DIKEMBALIKAN. Jika Anda memiliki sistem yang menarik citra dengan ringkasan manifes (sebagai lawan dari nama gambar), Anda tidak boleh menghapus gambar yang tidak diberi tag. Menghapus citra yang tidak diberi tag akan mencegah sistem tersebut menarik citra dari registri Anda. Daripada menarik berdasarkan manifes, pertimbangkan untuk mengadopsi skema pemberian tag yang unik, praktik terbaik yang disarankan.

Jika Anda ingin menghapus satu tag citra atau manifes menggunakan perintah Azure CLI, lihat Menghapus gambar penampung di Azure Container Registry.

Gunakan perintah pembersihan

Perintah kontainer acr purge menghapus gambar menurut tag dalam repositori yang cocok dengan filter nama dan yang lebih lama dari durasi yang ditentukan. Secara default, hanya referensi tag yang dihapus, bukan manifes dan data lapisan yang mendasarinya. Perintah memiliki opsi untuk juga menghapus manifes.

Catatan

acr purge tidak menghapus tag citra atau repositori tempat atribut write-enabled disetel ke false. Untuk informasi, lihat Mengunci citra kontainer di registri kontainer Azure.

acr purge dirancang untuk dijalankan sebagai perintah kontainer dalam Tugas ACR, sehingga mengautentikasi secara otomatis dengan registri tempat tugas dijalankan dan melakukan tindakan di sana. Contoh tugas dalam artikel ini menggunakan perintah acr purgealias sebagai pengganti perintah citra kontainer yang sepenuhnya memenuhi syarat.

Penting

  • Perintah standar untuk menjalankan acr purge adalah az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --optional parameter' /dev/null.
  • Sebaiknya jalankan perintah lengkap acr purge untuk menggunakan Pembersihan ACR. Misalnya, jalankan acr purge --help sebagai az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --help' /dev/null.

Minimal, tentukan hal berikut saat Anda menjalankan acr purge:

  • --filter - Ekspresi reguler nama repositori dan ekspresi reguler nama tag untuk memfilter citra di registri. Contoh: --filter "hello-world:.*" mencocokkan semua tag di repositori hello-world, --filter "hello-world:^1.*" mencocokkan tag yang diawali dengan 1 di repositori hello-world, dan --filter ".*/cache:.*" mencocokkan semua tag di repositori yang berakhiran /cache. Anda juga dapat meneruskan beberapa parameter --filter.
  • --ago - string durasi Go-style untuk menunjukkan durasi di mana citra akan dihapus. Durasi terdiri dari urutan satu atau lebih angka desimal, masing-masing dengan akhiran unit. Satuan waktu yang valid termasuk "h" untuk hari, "j" untuk jam, dan "m" untuk menit. Misalnya, --ago 2d3h6m memilih semua gambar yang difilter terakhir dimodifikasi lebih dari dua hari, 3 jam, dan 6 menit yang lalu, dan --ago 1.5h memilih gambar yang terakhir diubah lebih dari 1,5 jam yang lalu.

acr purge mendukung beberapa parameter opsional. Dua berikut digunakan dalam contoh dalam artikel ini:

  • --untagged - Menentukan bahwa semua manifes yang tidak memiliki tag terkait ( manifes tanpa tag ) akan dihapus. Parameter ini juga menghapus manifes yang tidak diberi tag selain tag yang sudah dihapus.
  • --dry-run - Menentukan bahwa tidak ada data yang dihapus, tetapi outputnya sama seperti jika perintah dijalankan tanpa tanda ini. Parameter ini bermanfaat untuk menguji perintah pembersihan untuk memastikannya tidak secara tidak sengaja menghapus data yang ingin Anda pertahankan.
  • --keep - Menentukan bahwa x jumlah tag terbaru yang akan dihapus dipertahankan. Tag terbaru ditentukan oleh waktu terakhir yang dimodifikasi dari tag.
  • --concurrency - Menentukan sejumlah tugas pembersihan untuk diproses secara bersamaan. Nilai default digunakan jika parameter ini tidak disediakan.

Catatan

Filter --untagged tidak merespons filter --ago. Untuk parameter tambahan, jalankan acr purge --help.

acr purge mendukung fitur lain dari perintah Tugas ACR termasuk variabel eksekusi dan log proses tugas yang dialirkan dan juga disimpan untuk pengambilan nanti.

Jalankan dalam tugas sesuai permintaan

Contoh berikut menggunakan perintah az acr run untuk menjalankan perintah acr purge sesuai permintaan. Contoh ini menghapus semua tag dan manifes gambar di repositori hello-world di myregistry yang telah diubah lebih dari 1 hari yang lalu dan semua manifes yang tidak memiliki tag. Perintah kontainer dilewatkan menggunakan variabel lingkungan. Tugas berjalan tanpa konteks sumber.

# 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

Jalankan dalam tugas yang dijadwalkan

Contoh berikut menggunakan perintah az acr task create untuk membuat tugas ACR terjadwal harian. Tag pembersihan tugas diubah lebih dari 7 hari yang lalu di repositori hello-world. Perintah kontainer dilewatkan menggunakan variabel lingkungan. Tugas berjalan tanpa konteks sumber.

# 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

Jalankan perintah az acr task show untuk melihat bahwa pemicu pengatur waktu telah dikonfigurasi.

Bersihkan sejumlah besar tag dan manifes

Menghapus sejumlah besar tag dan manifes dapat memakan waktu beberapa menit atau lebih lama. Untuk menghapus ribuan tag dan manifes, perintah mungkin perlu dijalankan lebih lama dari waktu tunggu default 600 detik untuk tugas sesuai permintaan, atau 3600 detik untuk tugas terjadwal. Jika batas waktu terlampaui, hanya sebagian tag dan manifes yang dihapus. Untuk memastikan bahwa pembersihan skala besar telah selesai, teruskan parameter --timeout untuk meningkatkan nilainya.

Misalnya, tugas sesuai permintaan berikut menetapkan waktu tunggu 3600 detik (1 jam):

# 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

Contoh: Pembersihan terjadwal dari beberapa repositori dalam registri

Contoh ini menjelaskan penggunaan acr purge untuk membersihkan beberapa repositori di registri secara berkala. Misalnya, Anda mungkin memiliki alur pengembangan yang mendorong citra ke repositori samples/devimage1 dan samples/devimage2. Anda secara berkala mengimpor citra pengembangan ke dalam repositori produksi untuk penerapan Anda, sehingga Anda tidak lagi memerlukan citra pengembangan. Setiap minggu, Anda membersihkan repositori samples/devimage1 dan samples/devimage2, sebagai persiapan untuk pekerjaan minggu mendatang.

Pratinjau pembersihan

Sebelum menghapus data, sebaiknya jalankan tugas pembersihan sesuai permintaan menggunakan parameter --dry-run. Opsi ini memungkinkan Anda untuk melihat tag dan manifes yang akan dihapus oleh perintah, tanpa menghapus data apa pun.

Dalam contoh berikut, filter di setiap repositori memilih semua tag. Parameter --ago 0d cocok dengan gambar dari segala usia di repositori yang cocok dengan filter. Modifikasi kriteria pemilihan seperlunya untuk skenario Anda. Parameter --untagged menunjukkan untuk menghapus manifes selain tag. Perintah kontainer diteruskan ke perintah az acr run menggunakan variabel lingkungan.

# 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

Tinjau output perintah untuk melihat tag dan manifes yang cocok dengan parameter pilihan. Karena perintah dijalankan dengan --dry-run, tidak ada data yang dihapus.

Contoh output:

[...]
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
[...]

Jadwalkan pembersihan

Setelah Anda memverifikasi eksekusi kering, buat tugas terjadwal untuk mengotomatiskan pembersihan. Contoh berikut menjadwalkan tugas mingguan pada hari Minggu pukul 1:00 UTC untuk menjalankan perintah pembersihan sebelumnya:

# 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

Jalankan perintah az acr task show untuk melihat bahwa pemicu pengatur waktu telah dikonfigurasi.

Langkah berikutnya

Pelajari tentang opsi lain untuk menghapus data citra di Azure Container Registry.

Untuk informasi selengkapnya tentang penyimpanan gambar, lihat Penyimpanan gambar kontainer di Azure Container Registry.