Чи є кращі практики та / або інструменти для регулярного чищення старих Docker-зображень?


13

Чи є елегантний спосіб чи найкраща практика щодо видалення старих зображень з реєстру Docker?

Я бачу тут багато запитів / проблем: https://github.com/docker/docker-registry/labels/delete , але не знайшов хорошого / популярного рішення для цього.

Отже, чи є інструмент чи техніка, яка допомогла б мені це зробити?

Також, чи є найкращі практики, яких ви дотримуєтесь, виконуючи це?


2
Ви питаєте, як почистити реєстр? (Яке посилання та питання ви надаєте), але прийнята відповідь - це не очищення реєстру, а чистка місцевого докера.
dalore

Відповіді:


10

Мені пощастило з Spotify / docker-gc . Його можна запустити з крона або як контейнер для докера.

Простий скрипт Docker-контейнера та зображення сміття для зображень.

  • Контейнери, які вийшли більше години тому, вилучаються.
  • Зображення, які не належать до жодного залишкового контейнера, після цього видаляються.

2
На перший погляд, схоже, за всіма башмаками є більш-менш підмножина однолінійки з відповіді @rombob. Це правда, чи є якась «розвідка» в docker-gcтому, що я пропускаю?
AnoE

1
Op посилання та задає питання, як очистити з реєстру, але docker-gc не очищає з реєстру, він просто очищається від вашої локальної машини. Я здогадуюсь, що ОП справді запитував, як прибирати місцево
сміливий

Сторінку Docker-gc тепер рекомендує використовувати docker system pruneзамість цього. Але я не знайшов, як виключити знімки деяких зображень за допомогою чорносливу Докера. Це є спосіб виключити деякі зображення за допомогою docker system prune?
Олександр Артеменко

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 and awk, зробіть той самий фільтр безпосередньо перед командою awk `regex {command}`
Tensibai

1
@Tensibai що-небудь, щоб зробити щасливими майстри AWK :)
rombob

На всякий випадок, це не просто педантично, ви економите нерест процесу і велику купу змін контексту :) Тут це не сильно змінюється, але будь-який привід виступати за це добре :)
Тенсібай

@Tensibai безумовно, хороші звички окупаються часом, нерести коштують нам часу та грошей :)
rombob

Особливо, коли ви розбираєте / форматуєте файли журналів мільярдів рядків, щоб підготуватися до введення R :) Тут я не очікую більше кількох десятків рядків.
Тенсібай

4

На моїй локальній машині (mac) у мене є невеликий сценарій, який я виявив, що я періодично запускаю, який очищає всі зайві зображення clean-docker-for-mac.sh

Для своїх серверів я запускаю талу воду / докер-очистку, яка періодично очищає виїжджаючі контейнери та видаляє зображення та томи, які не використовуються.

Я використовую багато різних образів Докера для своєї роботи над Codemason, що такі сценарії є для мене необхідними. Насолоджуйтесь!


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.