Apakah ada praktik terbaik dan / atau alat untuk membersihkan gambar Docker lama secara teratur?

13

Apakah ada cara yang elegan atau praktik terbaik untuk menghapus gambar lama dari registri Docker?

Saya melihat banyak permintaan / masalah di sini: https://github.com/docker/docker-registry/labels/delete , tetapi tidak menemukan solusi yang baik / populer untuk itu.

Jadi, apakah ada alat atau teknik yang akan membantu saya melakukan itu?

Juga, apakah ada praktik terbaik yang Anda ikuti saat melakukannya?

Dawny33
sumber
2
Apakah Anda bertanya cara membersihkan registri? (Yang merupakan tautan dan pertanyaan yang Anda berikan), tetapi jawaban yang diterima tidak membersihkan registri, tetapi membersihkan buruh pelabuhan lokal Anda.
dalore

Jawaban:

10

Saya beruntung dengan Spotify / docker-gc . Dapat dijalankan dari cron atau sebagai wadah buruh pelabuhan.

Wadah Docker sederhana dan skrip pengumpulan sampah gambar.

  • Kontainer yang keluar lebih dari satu jam yang lalu dihapus.
  • Gambar yang bukan milik wadah yang tersisa setelah itu dihapus.
Ahmed Elsabbahy
sumber
2
Pada pandangan pertama, tampaknya, di balik semua bash stuff, kurang lebih sebagian dari one-liners dari jawaban @rombob. Apakah itu benar, atau adakah "kecerdasan" di docker-gcmana saya hilang?
AnoE
1
Tautan tautan dan mengajukan pertanyaan tentang cara membersihkan dari registri, tetapi docker-gc tidak membersihkan dari registri, itu hanya membersihkan dari mesin lokal Anda. Saya kira OP benar-benar bertanya bagaimana cara membersihkan secara lokal
dalore
Halaman Docker-gc sekarang merekomendasikan untuk digunakan docker system prunesebagai gantinya. Tetapi saya tidak menemukan cara untuk mengecualikan beberapa gambar dari menghapus dengan prune Docker. Apakah ada cara untuk mengecualikan beberapa gambar dengan docker system prune?
Alexander Artemenko
9

Tidak bisa menyebut itu praktik terbaik tetapi ini yang kami gunakan dipicu oleh cron, senang melihat saran yang lebih baik.

echo "safely removing untagged images"
docker rmi $(docker images | awk '/<none>/{print $3}')

echo "safely removing stopped containers"
docker rm $(docker ps -a -q)

echo "safely removing old containers"
docker ps -a | awk '/weeks ago|months ago|days ago/{print $1}' | xargs --no-run-if-empty docker rm

echo "safely removing old images"
docker images | awk '/weeks ago|months ago|days ago/{print $3}' | xargs --no-run-if-empty docker rmi

echo "safely removing old volumes, custom rebuild of martin/docker-cleanup-volumes image"
docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(readlink -f /var/lib/docker):/var/lib/docker --rm example/docker-cleanup-volumes

echo "native cleanup Docker => 12"
docker system prune -f
Rombob
sumber
Tolong jangan berantai grep dan awk, lakukan filter yang sama sebelum perintah awk `regex {command}`
Tensibai
1
@Tensibai apa saja untuk membuat penyihir AWK senang :)
rombob
Untuk jaga-jaga, itu bukan hanya bertele-tele, Anda menghemat proses bertelur dan banyak perubahan konteks :) Tidak banyak berubah di sini, tetapi setiap kesempatan untuk mengadvokasi itu baik :)
Tensibai
@Tensibai pasti, kebiasaan baik terbayar dengan waktu, memunculkan kita waktu dan uang :)
rombob
Khususnya ketika Anda mem-parsing / memformat miliaran file baris log untuk mempersiapkan input R :) Di sini saya tidak mengharapkan lebih dari beberapa lusin baris.
Tensibai
4

Pada komputer lokal saya (mac) saya punya skrip kecil saya menemukan bahwa saya menjalankan secara berkala yang membersihkan semua kelebihan gambar hingga clean-docker-for-mac.sh

Untuk server saya, saya menjalankan pembersihan meltwater / buruh pelabuhan yang secara berkala membersihkan wadah yang keluar dan menghapus gambar dan volume yang tidak digunakan.

Saya menggunakan banyak gambar Docker yang berbeda untuk pekerjaan saya di Codemason bahwa skrip seperti ini adalah keharusan bagi saya. Nikmati!

Bhagg
sumber
0

docker system prune --volumes

Apakah cara untuk melakukan ini sejak v17. Dokumen di sini

Mbrevda
sumber