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