Docker: як видалити образи, контейнери та томи

Docker: як видалити образи, контейнери та томи
Переклад 7 хв. читання
24 серпня 2023

Вступ

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

Docker надає всі необхідні інструменти для очищення системи з командного рядка. Цей посібник у вигляді шпаргалки містить короткий довідник команд, які допоможуть звільнити місце на диску і впорядкувати систему, видаливши невикористовувані образи, контейнери та томи Docker.

Як користуватися цим посібником:

  • Цей посібник у форматі шпаргалки з окремими фрагментами консольних команд.
  • Переходьте до будь-якого розділу, який відповідає вашому завданню.

Видалення образів, контейнерів, томів і мереж, які не використовуються або "зависли"

У Docker є єдина команда, яка очистить усі ресурси - образи, контейнери, томи та мережі - що зависли (не позначені тегами або не пов'язані з контейнером):

docker system prune

Щоб додатково видалити всі зупинені контейнери та всі невикористані образи (а не лише ті, що зависли), додайте до команди параметр -a:

docker system prune -a

Видалення образів Docker

Видалення одного або кількох конкретних образів

Скористайтеся командою docker images з параметром -a, щоб знайти ідентифікатор зображень, які ви хочете видалити. У результаті буде виведено кожен образ, включно з проміжними шарами образів. Коли ви знайдете образи, які потрібно видалити, ви можете передати їхні ідентифікатори або теґи до docker rmi. Вивести список:

docker images -a

Видалити:

docker rmi Image Image

Видалення образів, що зависли

Образи в докері складаються з декількох шарів. Завислі образи - це шари, які не мають відношення до жодного з помічених образів. Вони більше не виконують жодної ролі та займають місце на диску. Їх можна знайти, додавши до команди docker images прапорець фільтра -f зі значенням dangling=true. Якщо ви впевнені, що хочете їх видалити, скористайтеся командою docker images prune:

Примітка: Якщо ви збираєте образ, не позначивши його тегом, він з'явиться у списку завислих образів, оскільки не матиме зв'язку з іншими, позначеними тегом образами. Ви можете запобігти цій ситуації, вказавши тег під час збірки, а також додати тег до образу заднім числом за допомогою команди docker tag.

Вивести список:

docker images -f dangling=true

Видалити:

docker image prune

Видалення зображень за шаблоном

Ви можете знайти всі зображення, які відповідають шаблону, за допомогою комбінації docker images та grep. Після того, як ви впевнилися, ви можете видалити їх за допомогою awk, передавши ідентифікатори docker rmi. Зауважте, що ці утиліти не постачаються Docker і не обов'язково доступні на всіх системах:

Вивести список:

docker images -a |  grep "pattern"

Видалити:

docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

Видалення всіх образів

Можна вивести список усіх образів Docker у системі, додавши -a до команди docker images. Якщо ви впевнені, що хочете видалити їх усі, ви можете додати прапорець -q, щоб передати ідентифікатор образу команді docker rmi:

Вивести список:

docker images -a

Видалити:

docker rmi $(docker images -a -q)

Видалення контейнерів

Видалення одного або декількох конкретних контейнерів

Скористайтеся командою docker ps з параметром -a, щоб знайти назву або ідентифікатор контейнерів, які ви хочете вилучити:

Вивести список:

docker ps -a

Видалити:

docker rm ID_or_Name ID_or_Name

Видалення контейнера при завершенні роботи

Якщо під час створення контейнера ви знаєте, що після завершення роботи ви не захочете його зберігати, ви можете запустити docker run --rm для автоматичного видалення контейнера після завершення роботи:

docker run --rm image_name

Видалення всіх зупинених контейнерів

Ви можете знайти контейнери за допомогою docker ps -a і відфільтрувати їх за статусом: created, restarting, running, paused, або exited. Щоб переглянути список завершених контейнерів, використовуйте параметр -f для фільтрування за статусом. Якщо ви переконалися, що хочете видалити ці контейнери, скористайтеся параметром -q, щоб передати їхні ідентифікатори команді docker rm:

Вивести список:

docker ps -a -f status=exited

Видалити:

docker rm $(docker ps -a -f status=exited -q)

Видалення контейнерів за допомогою декількох фільтрів

Фільтри докера можна комбінувати, використовуючи прапорець фільтра з додатковим значенням. У результаті ви отримаєте список контейнерів, які задовольняють будь-яку з умов. Наприклад, якщо ви хочете видалити всі контейнери, позначені як створені (стан, який може виникнути, якщо ви запустили контейнер з невірною командою) або завершені, ви можете скористатися двома фільтрами:

Вивести список:

docker ps -a -f status=exited -f status=created

Видалити:

docker rm $(docker ps -a -f status=exited -f status=created -q)

Видалення контейнерів за шаблоном

Ви можете знайти всі контейнери, які відповідають шаблону, за допомогою комбінації docker ps та grep. Коли ви впевнені, що маєте список контейнерів, які хочете видалити, ви можете скористатися awk і xargs, щоб передати ідентифікатор докеру rm. Вивести список:

docker ps -a |  grep "pattern”

Видалити:

docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm

Зупинка та видалення всіх контейнерів

Ви можете переглянути контейнери у вашій системі за допомогою команди docker ps. Додавання параметра -a покаже усі контейнери. Якщо ви впевнені, що хочете їх видалити, ви можете додати прапорець -q, щоб передати ідентифікатори командам docker stop і docker rm: Вивести список:

docker ps -a

Видалити:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

Видалення томів

Видалення одного або кількох конкретних томів - починаючи з версії Docker 1.9 і вище

За допомогою команди docker volume ls знайдіть назву тома, який ви бажаєте видалити. Потім ви можете вилучити один або декілька томів за допомогою команди docker volume rm:

Вивести список:

docker volume ls

Видалити:

docker volume rm volume_name volume_name

Видалення завислих томів - починаючи з версії 1.9

Суть томів полягає у тому, щоб існувати незалежно від контейнерів, тому, коли контейнер видаляється, том не видаляється автоматично. Якщо том існує і більше не підключений до жодного контейнера, він називається "завислим" томом. Щоб знайти такі томи та підтвердити, що ви хочете їх видалити, ви можете скористатися командою docker volume ls з фільтром, який обмежить результати пошуку до висячих томів. Якщо список вас влаштовує, ви можете видалити їх усі за допомогою команди docker volume prune:

Вивести список:

docker volume ls -f dangling=true

Видалити:

docker volume prune

Видалення контейнера та його тому

Якщо ви створили том без назви, його можна видалити одночасно з контейнером за допомогою прапора -v. Зауважте, що це працює лише з безіменними томами. Після успішного видалення контейнера буде показано його ідентифікатор. Зауважте, що видалення тома не супроводжується ніякими повідомленнями. Якщо він безіменний, його буде автоматично видалено з системи. Якщо він має ім'я, він не буде видалений.

docker rm -v container_name

Висновок

У цьому посібнику розглянуто деякі з найпоширеніших команд, що використовуються для видалення образів, контейнерів і томів у Docker. Існує багато інших комбінацій і параметрів, які можна використовувати з кожною з них. Докладні відомості про доступні можливості наведено у документації Docker для docker system prune, docker rmi, docker rm та docker volume rm.

Джерело: How To Remove Docker Images, Containers, and Volumes
Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація