Eski Docker görüntülerini düzenli olarak temizlemek için en iyi uygulamalar ve / veya araçlar var mı?


13

Eski görüntüleri Docker kayıt defterinden silmek söz konusu olduğunda zarif bir yol veya en iyi uygulama var mı?

Burada birçok istek / sorun görüyorum: https://github.com/docker/docker-registry/labels/delete , ancak bunun için iyi / popüler bir çözüm bulamadık.

Peki, bunu yapmama yardımcı olacak bir araç veya teknik var mı?

Ayrıca, bunu yaparken takip ettiğiniz en iyi uygulamalar var mı?


2
Kayıt defterini nasıl temizleyeceğinizi mi soruyorsunuz? (Bu, sağladığınız bağlantı ve soru), ancak kabul edilen yanıt kayıt defterini temizlemiyor, ancak yerel liman işçinizi temizliyor.
dalore

Yanıtlar:


10

Spotify / docker-gc ile iyi şanslar yaşadım . Cron'dan veya bir yükleme istasyonu konteyneri olarak çalıştırılabilir.

Basit bir Docker konteyner ve görüntü çöp toplama komut dosyası.

  • Bir saatten uzun bir süre önce çıkan kaplar kaldırılır.
  • Bundan sonra kalan kapsayıcıya ait olmayan görüntüler kaldırılır.

2
İlk bakışta, tüm bash malzemelerinin arkasında, @rombob'un cevabından aşağı yukarı tek gömleklerin bir alt kümesi gibi görünüyor. Bu doğru mu, yoksa docker-gceksik olduğum bir “istihbarat” var mı?
AnoE

1
Op bağlantıları ve kayıt defterinden nasıl temizleneceği hakkında bir soru sorar, ancak docker-gc kayıt defterinden temizlenmez, sadece yerel makinenizden temizler. Sanırım OP gerçekten yerel olarak temizlemek nasıl soran oldu
dalore

Docker-gc'nin sayfası artık docker system prunebunun yerine kullanılmasını önermektedir . Ancak bazı görüntülerin Docker'ın budamasıyla kaldırılmasını nasıl engelleyeceğimi bulamadım. Bazı görüntüleri hariç tutmak için bir yolu var docker system prunemı?
Alexander Artemenko

9

En iyi uygulama diyemem ama cron tarafından tetiklenen, daha iyi önerileri görmekten mutluluk duyduğumuz şey bu.

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

Lütfen grep ve awk'yi zincirlemeyin, aynı filtreyi awk komutu `regex {command} '' dan hemen önce yapın
Tensibai

1
@Tensibai AWK sihirbazlarını mutlu etmek için her şey :)
rombob

Her ihtimale karşı, bu sadece bilgiçlik değil, süreç yumurtlama ve bağlam değişiklikleri büyük bir grup tasarruf :) Burada çok değişmez, ama bunun için savunmak için herhangi bir fırsat iyidir :)
Tensibai

@Tensibai kesinlikle, iyi alışkanlıklar zamanla ödüyor, spawnlar bize zaman ve paraya mal oluyor :)
rombob

Özellikle R girişi için hazırlanmak için milyarlarca satır ayrıştırmak / formatlamak günlük dosyaları :) Burada birkaç düzineden fazla satır beklemiyorum.
Tensibai

4

Yerel makinemde (mac) küçük bir senaryom var, periyodik olarak çalıştığımı buldum, bu da tüm fazla görüntüleri temizliyor- clean-docker-for-mac.sh

Sunucularım için çıkan kapları periyodik olarak temizleyen ve kullanılmayan görüntüleri ve hacimleri kaldıran erimiş su / liman işçisi temizleme çalıştırıyorum .

Codemason'daki çalışmalarım için böyle komut dosyaları benim için bir gereklilik olan birçok farklı Docker görüntüsü kullanıyorum. Zevk almak!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.