Видалення docker образів без міток (untagged) - Звільняємо місце на диску
26 травня 2015 р. · 260 слів · 2 хв.
Десь через тиждень моїх ігор з докером у мене закінчилося місце на диску (rip).
Я припустив, що це сталося через встановлення багатьох різних проектів докером, і був правий. Оскільки процес встановлення створює окремий образ для кожного рядка з Dockerfile (кожен новий образ ґрунтується на попередньому), це прискорює процес збірки (адже при зміні Dockerfile потрібно перебудовувати тільки образи, що починаються з рядка зі зміною), але потребує досить багато місця для зберігання усього цього.
Я не зміг знайти вбудованої команди для видалення зупинених контейнерів та образів без міток (untagged), тому я поєднав кілька команд.
Якщо ви маєте стандартну інсталяцію Docker, для всіх команд потрібно додати ‘sudo’ перед ‘docker’, або виконувати команди як ‘root’.
Для видалення всіх зупинених контейнерів:
Це видалить всі зупинені контейнери, отримуючи список за допомогою команди
docker ps -a -q
та передачі їх ідентифікаторів уdocker rm
. Ця команда не зможе видалити запущені контейнери та повідомить вас про це.
docker rm $(docker ps -a -q)
Для видалення всіх образів без міток (untagged)
Зазвичай це є проміжні образи, які використовуються для побудови кінцевого, або просто застарілі та уже не потрібні.
Тут ми викликаємо
docker images
, щоб отримати список образів, передаємо його вgrep
, щоб відкинути ті, які маютьID
, та все це потрапляє вawk "{print $3}"
, щоб витягнути третій стовпець з кожного рядка, який є ідентифікатором образу.
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
Після виконання цих двох команд я звільнив 15 Гб місця. Якщо мені знадобиться більше місця, я завжди зможу видалити ще щось, оскільки папка з образами важить 5 Гб :)
Оригинал поста: http://jimhoskins.com/