Блог компанії 3v-Hosting
Як видаляти образи, контейнери та томи в Docker
9 хв.
Своєю появою в далекому 2013 році Docker зробив революцію в тому, як ми можемо розробляти, доставляти і запускати свої та не лише свої програми, використовуючи технологію контейнеризації. Нещодавно ми писали про те, як встановити Docker на сервер з ОС Ubuntu 22 та користуватися ним. Однак, якщо ми давно працюємо з Docker, наша система може накопичувати значну кількість образів, контейнерів і томів Docker, які нам більше не потрібні. Ці залишки можуть займати цінний дисковий простір і можуть викликати конфлікти. Тому дуже важливо знати, як ефективно видаляти ці артефакти Docker, про що й йтиметься у цій статті.
Що таке образи, контейнерів та томи в Docker
Перш ніж почати розбиратися з тим, як видаляти образи, контейнери та томи - нам важливо зрозуміти, що являє собою кожен із компонентів, з якими ми матимемо справу:
Образи Docker: це шаблони, призначені виключно для читання та містять код програми та вказівки на всі її залежності. Образи використовують для створення контейнерів Docker. Їх можна завантажувати з Docker репозиторію, а також ділитися своїми образами, що містять вашу програму.
Контейнери Docker: контейнери – це екземпляри образів Docker у стані роботи, запущені, тобто під час їх виконання. Це невеликі ізольовані середовища зі своїм набором програмного забезпечення, де працюють програми.
Тома Docker: томи використовуються для збереження даних, що згенеровані та використовуються контейнерами Docker, навіть після їх вимкнення. Можна уявити собі як постійну пам'ять, якийсь простір на жорсткому диску вашого сервера, який виділено винятково для роботи з певним контейнером і які можна легко переносити з одного місця на диску на інше або навіть між різними серверами, при перенесенні якоїсь програми цілком. Таким чином, якщо контейнер можна уявити як невеликий окремий сервер, то Том - це його жорсткий диск.
Ось тепер, коли ми визначилися з основними поняттями – ми можемо розпочати практику.
Видалення Docker образів
Docker образи можуть швидко накопичуватися у вашій системі, особливо якщо ви часто завантажуєте та створюєте нові образи. Ось як керувати ними та видаляти їх:
Відображення списку образів Docker
Перед видаленням образів корисно подивитися, які образи зараз знаходяться у вашій системі. Використовуйте наступну команду для виведення списку всіх образів Docker:
docker images
Ця команда відобразить список образів разом з їх репозиторіями, тегами та розмірами. Наприклад:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 77af4d6b9913 19 hours ago 1.089 GB
committ latest b6fa739cedf5 19 hours ago 1.089 GB
<none> <none> 78a85c484f71 19 hours ago 1.089 GB
docker latest 30557a29d5ab 20 hours ago 1.089 GB
<none> <none> 5ed6274db6ce 24 hours ago 1.089 GB
postgres 9 746b819f315e 4 days ago 213.4 MB
postgres 9.3 746b819f315e 4 days ago 213.4 MB
postgres 9.3.5 746b819f315e 4 days ago 213.4 MB
postgres latest 746b819f315e 4 days ago 213.4 MB
Видалення певного образу Docker
Щоб видалити певний Docker образ, вам знадобиться ідентифікатор образу або ім'я та тег репозиторію. Використовуйте наступну команду для видалення образу:
docker rmi <image_id>
Замініть <image_id> фактичним ідентифікатором зображення. Ви також можете використовувати ім'я репозиторію та тег:
docker rmi <repository>:<tag>
Наприклад:
docker rmi ubuntu:latest
Примусове видалення образів Docker
Іноді ви можете зіткнутися із ситуацією, коли образ використовується зупиненим та запущеним контейнером, що перешкоджає його видаленню. У таких випадках можна використовувати прапор -f для примусового видалення образу:
docker rmi -f <image_id>
Видалення всіх Docker образів
ВАЖЛИВО! Будьте обережні з наступною командою, тому що вона видалить усі образи з вашої системи.
Щоб видалити всі образи Docker з вашої системи, використовуйте наступну команду:
docker rmi $(docker images -q)
Команда docker images -q, що знаходиться в дужках, виводить список усіх ідентифікаторів образів, які потім у вигляді параметра передаються команді docker rmi для їх видалення.
Видалення Docker контейнерів
Контейнери також можуть накопичуватися, особливо якщо ви часто створюєте (запускаючи образи) та зупиняєте контейнери. Перед тим як видалити якийсь контейнер, радимо перевірити список існуючих контейнерів, щоб не видалити чогось зайвого.
Список контейнерів Docker
Щоб вивести список усіх контейнерів Docker, скористайтеся наступною командою:
docker ps
Наприклад:
$ docker ps --no-trunc
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca5534a51dd04bbcebe9b23ba05f389466cf0c190f1f8f182d7eea92a9671d00 ubuntu:22.04 bash 17 seconds ago Up 16 seconds 3300-3310/tcp webapp
9ca9747b233100676a48cc7806131586213fa5dab86dd1972d6a8732e3a84a4d crosbymichael/redis:latest /redis-server --dir 33 minutes ago Up 33 minutes 6379/tcp redis,webapp/db
Як ви помітили, у цієї команди можуть бути параметри. Наприклад, якщо додати до цієї команди параметр -а (--all), тоді ця команда відобразить всі контейнери, включаючи зупинені
Видалення певного контейнера Docker
Для видалення певного контейнера вам знадобиться ідентифікатор або ім'я контейнера. Використовуйте наступну команду:
docker rm <container_id>
Замініть <container_id> фактичним ідентифікатором або ім'ям контейнера.
Примусове видалення контейнерів Docker
Якщо контейнер запущено і ви хочете видалити його, спочатку його потрібно його зупинити, ну або використовувати флаг -f для примусового видалення:
docker rm -f <container_id>
Видалення всіх зупинених Docker контейнерів
Щоб видалити всі зупинені контейнери, використовуйте таку команду:
docker container prune
Ця команда вимагатиме підтвердження перед видаленням усіх зупинених контейнерів.
Інші популярні статті у нашому Блозі:
- Що таке LVM і як налаштувати LVM в Ubuntu
- Максимізація продуктивності: 10G сервери та сфери їх застосування
- Жонглювання процесами — Використання Linux команди ps з прикладами
- Як відкрити порт в UFW
Видалення Docker томів
Тому використовуються для збереження даних, і з часом, після видалення старих контейнерів у вас можуть накопичуватися томи, що не використовуються. І щоб вони не засмічували дорогоцінний дисковий простір, їх також можна видалити. Але для початку нам, так само як і у випадку з образами та контейнерами – треба розуміти, які томи зараз існують у системі.
Список Docker томів
Щоб отримати список всіх томів Docker, використовуйте наступну команду:
docker volume ls
Ця команда відобразить список томів разом із драйверами та іменами. Наприклад:
$ docker volume ls
DRIVER VOLUME NAME
local my_chat_app
local john_game_app
Видалення певного Docker тома
Щоб видалити певний том, вам потрібне ім'я тома. Використовуйте наступну команду:
docker volume rm <volume_name>
Замініть <volume_name> фактичним ім'ям тома.
Примусове видалення томів Docker
Щоб примусово видалити том, можна використати флаг -f:
docker volume rm -f <volume_name>
Видалення всіх невикористовуваних Docker томів
Іноді буває зручним видалити всі томи, що не використовуються. Щоб це слідувати, використовуйте таку команду:
docker volume prune
Ця команда запитає підтвердження перед видаленням усіх томів, що не використовуються.
Розширені методи очищення
Docker надає безліч додаткових, зручних команд і методів, які допоможуть вам ефективніше керувати середовищем свого Docker і очищати його при потребі.
Видалення Dangling образів
Наприклад, ви можете видалити так звані Dangling образи, це образи, на які не посилається жоден контейнер. Щоб це зробити, використовуйте таку команду:
docker image prune
Автоматизація очищення Docker
Ручне очищення може бути стомлюючим, особливо якщо у вас багато Docker ресурсів або ви керуєте великою кількістю серверів. Ви можете автоматизувати процес очищення за допомогою скрипту. Нижче наведено приклад Bash скрипта для очищення образів, контейнерів та Docker томів:
#!/bin/bash
# Видалити всі зупинені контейнери
docker container prune -f
# Видалити всі невикористовувані томи
docker volume prune -f
# Видалити всі Dangling образи
docker image prune -f
# Видалити всі образи, що не використовуються.
docker image prune -af
echo "Очистка Docker завершена."
Збережіть цей скрипт як docker_cleanup.sh, зробіть його виконуваним та періодично запускайте його, щоб підтримувати чистоту Docker середовища:
chmod +x docker_cleanup.sh
./docker_cleanup.sh
Висновки
Ефективне керування Docker образами, контейнерами та томами має велике значення для підтримки чистого та функціонального Docker середовища, особливо, якщо у вашому управлінні знаходяться десятки та сотні Docker серверів. Регулярно видаляючи ресурси, що не використовуються і непотрібні, ви можете звільнити дисковий простір і уникнути потенційних конфліктів між додатками в майбутньому.
Озброївшись цими базовими командами, ви завжди можете адаптувати процес очищення до своїх конкретних потреб, тому що Docker - це дуже гнучкий інструмент, що дозволяє легко кастомізувати його використання.
Але також він може споживати безліч ресурсів, тому завжди пам'ятайте, що чисте Docker середовище не тільки заощаджує дисковий простір, але й підвищує продуктивність та знижує ризик виникнення проблем, спричинених застарілими чи невикористовуваними ресурсами. Тому завжди приділяйте час регулярному перегляду та очищенню непотрібних образів, контейнерів та томів.