มีแนวทางปฏิบัติที่ดีที่สุดและ / หรือเครื่องมือในการทำความสะอาดอิมเมจ Docker แบบเก่าเป็นประจำหรือไม่?


13

มีวิธีที่สง่างามหรือการปฏิบัติที่ดีที่สุดเมื่อพูดถึงการลบภาพเก่าออกจาก Registry Docker หรือไม่?

ฉันเห็นคำขอ / ปัญหามากมายที่นี่: https://github.com/docker/docker-registry/labels/deleteแต่ไม่พบโซลูชันที่ดี / เป็นที่นิยมสำหรับมัน

ดังนั้นมีเครื่องมือหรือเทคนิคที่จะช่วยฉันทำสิ่งนั้นหรือไม่?

นอกจากนี้ยังมีแนวปฏิบัติที่ดีที่สุดที่คุณทำตามในขณะที่ทำมันหรือไม่?


2
คุณกำลังถามวิธีทำความสะอาดรีจิสทรี? (ซึ่งเป็นลิงค์และคำถามที่คุณให้ไว้) แต่คำตอบที่ยอมรับไม่ได้ทำความสะอาดรีจิสทรี แต่เป็นการทำความสะอาดนักเทียบท่าในพื้นที่ของคุณ
dalore

คำตอบ:


10

ฉันเคยโชคดีกับ Spotify / นักเทียบท่า-GC มันสามารถเรียกใช้จาก cron หรือเป็นภาชนะที่นักเทียบท่า

คอนเทนเนอร์ Docker แบบง่ายและสคริปต์การรวบรวมขยะของรูปภาพ

  • คอนเทนเนอร์ที่ออกจากเกินกว่าหนึ่งชั่วโมงที่ผ่านมาจะถูกลบออก
  • รูปภาพที่ไม่ได้เป็นของคอนเทนเนอร์ที่เหลืออยู่หลังจากนั้นจะถูกลบออก

2
เมื่อดูอย่างรวดเร็วครั้งแรกดูเหมือนว่าจะอยู่เบื้องหลังสิ่งทุบตีทั้งหมดหรือน้อยกว่าหนึ่งซับของตอร์ปิโดหนึ่งคำตอบจาก @rombob นั่นเป็นความจริงหรือว่ามี "ความฉลาด" ในการdocker-gcที่ฉันขาดหายไป?
AnoE

1
เชื่อมโยงและถามคำถามเกี่ยวกับวิธีการทำความสะอาดจากรีจิสทรี แต่นักเทียบท่า -GC ไม่ได้ทำความสะอาดจากรีจิสทรีมันแค่ล้างออกจากเครื่องของคุณ ฉันเดาว่า OP กำลังถามวิธีทำความสะอาดภายในเครื่อง
จริงๆ

ตอนนี้หน้าของ Docker-gc แนะนำให้ใช้docker system pruneแทน แต่ฉันไม่พบวิธีแยกภาพบางส่วนออกจากการตัดด้วยลูกพรุนของ Docker มีวิธียกเว้นภาพบางภาพด้วยdocker system pruneหรือไม่?
Alexander Artemenko

9

ไม่สามารถเรียกว่าเป็นแนวทางปฏิบัติที่ดีที่สุด แต่นี่คือสิ่งที่เราใช้เรียกโดย cron ยินดีที่จะเห็นคำแนะนำที่ดีกว่า

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

โปรดอย่าเชื่อมโยง grep และ awk
ทำตัว

1
@Tensibai อะไรก็ได้ที่ทำให้ AWK พ่อมดมีความสุข :)
rombob

ในกรณีที่ไม่ใช่แค่เรื่องอื้อฉาวคุณบันทึกกระบวนการวางไข่และการเปลี่ยนแปลงบริบทจำนวนมาก :) มันไม่ได้เปลี่ยนแปลงอะไรมากที่นี่ แต่โอกาสใด ๆ ที่จะสนับสนุนมันก็ดี :)
Tensibai

@Tensibai แน่นอนนิสัยที่ดีจ่ายออกไปตามเวลาวางไข่ทำให้เราเสียเวลาและเงิน :)
rombob

พิเศษเมื่อคุณแยก / จัดรูปแบบไฟล์บันทึกพันบรรทัดเพื่อเตรียมความพร้อมสำหรับอินพุต R :) ที่นี่ฉันไม่ได้คาดหวังมากกว่าสองสามบรรทัด
Tensibai

4

ในเครื่องท้องถิ่นของฉัน (mac) ฉันมีสคริปต์เล็กน้อยฉันพบว่าฉันเรียกใช้เป็นระยะซึ่งล้างรูปภาพส่วนเกินทั้งหมดให้เป็นclean-docker-for-mac.sh

สำหรับเซิร์ฟเวอร์ของฉันฉันเรียกใช้การล้างข้อมูลบน meltwater / docker-cleanupซึ่งล้างภาชนะที่ออกเป็นระยะและลบรูปภาพและโวลุ่มที่ไม่ได้ใช้งาน

ฉันใช้อิมเมจ Docker ที่แตกต่างกันมากมายสำหรับการทำงานกับ Codemason ซึ่งสคริปต์แบบนี้มีความจำเป็นสำหรับฉัน สนุก!


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.