Видалення 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/