Больше не нужно искать работу мечты — присоединяйтесь к команде Клауда

Как удалить образы, контейнеры и тома Docker

Роман Андреев
Роман Андреев
Технический писатель
23 июня 2023 г.
7869
8 минут чтения
Средний рейтинг статьи: 3.6

Как удалить образы, контейнеры и тома Docker 

Docker — один из наиболее востребованных инструментов в сфере разработки и DevOps. Однако порой образуется множество не нужных более образов, а также контейнеров и томов. Их переизбыток может приводить к замедлению работы приложений и загромождению диска, поэтому периодически нужно избавляться от этого мусора.

И надо сказать, что в Докере есть достаточно возможностей, чтобы периодически чистить систему, причем делать это можно непосредственно из командной строки. И когда вы запомните приведенные ниже команды, процесс очистки будет ненамного сложнее, чем использование «корзины» в ОС. И не забудьте заглянуть в «Заключение», которое обычно читают редко, но в данном случае мы решили включить туда полезное предостережение.

Удаляем все объекты

Сначала приведем команду, которая удаляет всё, включая и так называемые «висячие» объекты:

docker system prune

А для удаления остановленных объектов потребуется флаг -a, вот так:

docker system prune -a

Не используемые более образы уничтожаются так:

docker image prune -a

Эта команда включает также дочерние образы и метаданные.

Теперь избавляемся от всех контейнеров:

docker container prune

И, наконец, убираем тома:

docker volume prune

Чтобы убедиться, что вы удаляете правильные объекты, задействуйте флаги --dry-run или -n для просмотра объектов без их фактического уничтожения. Кроме того, эти команды удаляют объекты без возможности восстановления. Поэтому перед выполнением приведенных выше (и ниже) инструкций удостоверьтесь, что вы понимаете, какие объекты будут удалены, и вы не удаляете что-то важное.

Как удалить образы Docker

Здесь рассмотрим основные инструкции по удалению определенного количества образов с заданными параметрами или без них.

Удаляем определенные образы

Для этого сначала вводим:

docker images -a

Команда позволяет отобразить список всех Docker-образов, которые находятся на локальной машине, включая не используемые в данный момент. Флаг -a указывает Docker на отображение всех имеющихся образов, а не только тех, которые были недавно созданы.

Далее вводим:

docker rmi Img Img

Вместо Img подставьте название для удаления. Несколько названий следует указывать через пробел.

Удаляем «висячие» образы

Чтобы получить перечень неиспользуемых образов (такие объекты также называются «висячими»), вводим:

docker images -f dangling=true

Такие образы могут возникать при создании новых на основе старых с тем же именем, но без тега. В этом случае старый образ становится висячим и не используется. -f фильтрует объекты по различным критериям, в данном случае мы выполняем фильтрацию, задав dangling=true.

Теперь для удаления неиспользуемых образов вводим:

docker image prune

Эта инструкция затрагивает висячие образы и те, которые более не используются. При выполнении этой инструкции образы будут удалены без возможности восстановления.

Удаляем по шаблону

Для поиска образов, содержащих некоторый шаблон в их именах, введите:

docker images -a | grep "pattern"

-a отображает все образы, в том числе неактивные и промежуточные. grep фильтрует вывод, чтобы отобразить только те образы, в именах которых содержится указанный шаблон (соответственно, введите его вместо "pattern", сохранив кавычки).

А чтобы избавиться от них, введите:

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

awk '{print $3}' отображает только третий столбец вывода, содержащий идентификаторы. xargs docker rmi нужен, чтобы передать идентификаторов в docker rmi, удаляющей данные образы. xargs разбивает список идентификаторов образов на отдельные аргументы. Если вы пытаетесь удалить несколько образов, перечисляя их идентификаторы вручную, вы можете столкнуться с проблемой, если идентификаторы содержат пробелы или другие специальные символы. В этом случае использование xargs более безопасно и удобно.

Для удаления используемых образов введите:

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

Это остановит и уничтожит контейнеры перед удалением образов.

Удаляем все образы

Для отображения списка всех образов, которые находятся на локальной машине, включая не используемые в данный момент, вводим:

docker images -a

Далее для удаления всех неактивных образов на локальной машине вводим:

docker rmi $(docker images -a -q)

Эта команда выводит список идентификаторов всех образов на локальной машине и передает его в качестве аргумента docker rmi, которая удаляет все Docker-образы без возможности восстановления. А чтобы удалить и активные, используемые контейнерами, вводим:

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

Как удалить контейнеры Docker

В этой части рассмотрим все основные инструкции по удалению определенного количества контейнеров с заданными параметрами или без них.

Удаляем определенные контейнеры

Для начала вводим:

docker ps -a

Теперь вводим инструкцию для удаления:

docker rm Name_or_ID

Для ее корректного использования замените Name_or_ID соответствующим количеством ID или имен (несколько объектов следует указывать через пробел).

Также для удаления контейнера он должен быть остановлен. Если контейнер запущен, то сначала вводим:

docker stop Name_or_ID

А для уничтожения всех объектов этого типа на локальной машине введите:

docker rm $(docker ps -a -q)

Удаляем контейнеры при выходе

Для запуска нового контейнера на основе указанного образа введите, заменив имя на нужное:

docker run --rm image_name

Флаг --rm указывает Docker на удаление после остановки.

Теперь небольшое пояснение. По умолчанию созданный контейнер остается на локальной машине после остановки. И если вы не хотите сохранять контейнер, то задействуйте флаг --rm. Это очень удобно при запуске временных контейнеров для выполнения какой-то задачи, например, запуска тестов, когда вы не хотите оставлять за собой «мусор». А для сохранения данных помогут такие флаги, как -v для монтирования томов или -e для передачи переменных среды.

Удаляем все запущенные контейнеры

Сначала вводим:

docker ps -a -f status=exited

Флаг -f status=exited здесь фильтрует вывод.

Теперь для удаления вводим:

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

Удаляем контейнеры по нескольким фильтрам

Чтобы вывести контейнеры со статусами exited (остановлены) и created (созданы), то есть не запущенные и не работающие в данный момент, введите:

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

Флаги -a и -f здесь указывают Docker на отображение всех контейнеров и их фильтрацию.

Теперь для удаления всех объектов, которые находятся в состояниях exited или created, введите:

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

Удаляем по шаблону

Для получения перечня контейнеров на локальной машине, а затем фильтрации списка, чтобы отобразить только те объекты, в именах которых есть определенный шаблон, введите, заменив "pattern" на нужный шаблон, сохраняя кавычки:

docker ps -a | grep "pattern"

Теперь для удаления объектов, в именах которых есть строка "pattern", вводим:

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

Эта инструкция использует grep для фильтрации списка, awk '{print $1}' для извлечения первого столбца (идентификатора), а затем передает идентификаторы, используя xargs. Добавим, что docker ps -a | grep "pattern" может выводить не только имена, но и другую информацию: статус, ID и т.д. Поэтому для удаления объектов, в указанных параметрах которых есть строка "pattern", задействуйте инструкцию выше.

Останавливаем и удаляем все контейнеры

Для получения перечня контейнеров на локальной машине, включая не запущенные в данный момент, вводим знакомую инструкцию:

docker ps -a

Она покажет информацию о каждом объекте: идентификатор, имя, статус, задействованные ресурсы и т.д.

Для остановки всех контейнеров на локальной машине вводим:

docker stop $(docker ps -a -q)

И теперь удаляем их, вот так:

docker rm $(docker ps -a -q)

Как удалить тома Docker

В завершающей главе рассмотрим основные инструкции по удалению определенного количества томов с заданными параметрами или без них.

Удаляем определенные тома

Для получения перечня томов на локальной машине введите:

docker volume ls

Команда выводит список имеющихся томов, включая информацию о них (ID, имена).

Для удаления определенного числа томов с заданными именами введите, добавив имя нужного тома вместо vlm_name:

docker volume rm vlm_name

Эта команда принимает разное количество аргументов. Для удаления нескольких объектов перечислите их названия через пробел:

docker volume rm my_volume1 my_volume2

Если тома используются контейнерами, находящимися в работающем состоянии, их нельзя удалить, пока эти контейнеры не будут остановлены или удалены. Попытки уничтожить такие объекты будут сопровождаться выводом ошибки.

Удаляем висячие тома

Для получения перечня висячих томов на локальной машине введите:

docker volume ls -f dangling=true

Инструкция выводит их перечень, включая их ID и имена. Теперь можно избавиться от них, введя:

docker volume prune

Удалению подвергнутся все объекты данного типа, не ассоциированные ни с одним контейнером и не использующиеся на текущий момент.

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

Чтобы удалить тома, которые были созданы автоматически, вводим:

docker rm -v container_name

Флаг -v здесь указывает Docker на необходимость удаления всех связанных томов. Дело в том, что такие тома сохраняются на локальной машине, если не будут удалены явно. Поэтому такая операция может быть полезна для освобождения занимаемого не используемыми томами места на локальной машине.

Заключение

В завершение отметим, что перед тем, как выполнять инструкции по удалению образов, контейнеров и томов, нужно убедиться, что удаляемые объекты больше не потребуются вам или членам вашей команды. Ведь все эти операции — необратимые. А на этом всё, желаем успехов в работе с Docker!

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
23 июня 2023 г.
7869
8 минут чтения
Средний рейтинг статьи: 3.6
Пока нет комментариев