Saat ini Anda tidak dapat menggunakan API Pendaftaran untuk tugas itu. Ini hanya memungkinkan Anda untuk menghapus repositori atau tag tertentu.
Secara umum, menghapus repositori berarti bahwa semua tag yang terkait dengan repo ini dihapus.
Menghapus tag berarti, bahwa hubungan antara gambar dan tag dihapus.
Tidak satu pun di atas akan menghapus satu gambar. Mereka dibiarkan di disk Anda.
Penanganan masalah
Untuk solusi ini, Anda harus menyimpan gambar buruh pelabuhan Anda secara lokal.
Solusi untuk solusi Anda adalah menghapus semua kecuali tag terbaru dan dengan demikian berpotensi menghilangkan referensi ke gambar terkait. Kemudian Anda dapat menjalankan skrip ini untuk menghapus semua gambar, yang tidak dirujuk oleh tag apa pun atau keturunan dari gambar apa pun yang digunakan.
Terminologi (gambar dan tag)
Pertimbangkan grafik gambar seperti ini di mana huruf ( A
, B
, ...) mewakili ID image pendek dan <-
sarana bahwa gambar didasarkan pada gambar lain:
A <- B <- C <- D
Sekarang kita menambahkan tag ke gambar:
A <- B <- C <- D
| |
| <version2>
<version1>
Di sini, tag <version1>
referensi gambar C
dan tag <version2>
referensi gambar D
.
Saring pertanyaan Anda
Dalam pertanyaan Anda, Anda mengatakan ingin menghapus
semua gambar kecuali latest
. Sekarang, terminologi ini tidak sepenuhnya benar. Anda telah mencampur gambar dan tag. Melihat grafik saya pikir Anda akan setuju bahwa tag tersebut <version2>
mewakili versi terbaru. Bahkan, menurut pertanyaan ini, Anda dapat memiliki tag yang mewakili versi terbaru:
A <- B <- C <- D
| |
| <version2>
| <latest>
<version1>
Karena <latest>
tag mereferensikan gambar, D
saya bertanya: apakah Anda benar-benar ingin menghapus semua kecuali gambar D
? Mungkin tidak!
Apa yang terjadi jika Anda menghapus tag?
Jika Anda menghapus tag <version1>
menggunakan Docker REST API Anda akan mendapatkan ini:
A <- B <- C <- D
|
<version2>
<latest>
Ingat: Docker tidak akan pernah menghapus gambar! Bahkan jika itu terjadi, dalam hal ini tidak dapat menghapus gambar, karena gambar C
adalah bagian dari keturunan untuk gambar D
yang ditandai.
Bahkan jika Anda menggunakan skrip ini , tidak ada gambar yang akan dihapus.
Kapan suatu gambar bisa dihapus
Di bawah kondisi yang dapat Anda kontrol ketika seseorang dapat menarik atau mendorong ke registri Anda (misalnya dengan menonaktifkan antarmuka REST). Anda dapat menghapus gambar dari grafik gambar jika tidak ada gambar lain yang didasarkan padanya dan tidak ada tag yang merujuknya.
Perhatikan bahwa dalam grafik berikut, gambar D
ini tidak didasarkan pada C
tetapi pada B
. Karena itu, D
tidak bergantung pada C
. Jika Anda menghapus tag <version1>
pada grafik ini, gambar C
tidak akan digunakan oleh gambar apa pun dan skrip ini dapat menghapusnya.
A <- B <--------- D
\ |
\ <version2>
\ <latest>
\ <- C
|
<version1>
Setelah pembersihan grafik gambar Anda terlihat seperti ini:
A <- B <- D
|
<version2>
<latest>
Apa ini yang kau inginkan?