Docker — один из наиболее востребованных инструментов в сфере разработки и DevOps. Однако порой образуется множество не нужных более образов, а также контейнеров и томов. Их переизбыток может приводить к замедлению работы приложений и загромождению диска, поэтому периодически нужно избавляться от этого мусора.
И надо сказать, что в Докере есть достаточно возможностей, чтобы периодически чистить систему, причем делать это можно непосредственно из командной строки. И когда вы запомните приведенные ниже команды, процесс очистки будет ненамного сложнее, чем использование «корзины» в ОС. И не забудьте заглянуть в «Заключение», которое обычно читают редко, но в данном случае мы решили включить туда полезное предостережение.
VDS и VPS
биллингом по всему миру: Россия, Азия и Европа.
Удаляем все объекты
Сначала приведем команду, которая удаляет всё, включая и так называемые «висячие» объекты:
А для удаления остановленных объектов потребуется флаг -a, вот так:
Не используемые более образы уничтожаются так:
Эта команда включает также дочерние образы и метаданные.
Теперь избавляемся от всех контейнеров:
И, наконец, убираем тома:
Чтобы убедиться, что вы удаляете правильные объекты, задействуйте флаги --dry-run или -n для просмотра объектов без их фактического уничтожения. Кроме того, эти команды удаляют объекты без возможности восстановления. Поэтому перед выполнением приведенных выше (и ниже) инструкций удостоверьтесь, что вы понимаете, какие объекты будут удалены, и вы не удаляете что-то важное.
Как удалить образы Docker
Здесь рассмотрим основные инструкции по удалению определенного количества образов с заданными параметрами или без них.
Удаляем определенные образы
Для этого сначала вводим:
Команда позволяет отобразить список всех Docker-образов, которые находятся на локальной машине, включая не используемые в данный момент. Флаг -a указывает Docker на отображение всех имеющихся образов, а не только тех, которые были недавно созданы.
Далее вводим:
Вместо Img подставьте название для удаления. Несколько названий следует указывать через пробел.
Удаляем «висячие» образы
Чтобы получить перечень неиспользуемых образов (такие объекты также называются «висячими»), вводим:
Такие образы могут возникать при создании новых на основе старых с тем же именем, но без тега. В этом случае старый образ становится висячим и не используется. -f фильтрует объекты по различным критериям, в данном случае мы выполняем фильтрацию, задав dangling=true.
Теперь для удаления неиспользуемых образов вводим:
Эта инструкция затрагивает висячие образы и те, которые более не используются. При выполнении этой инструкции образы будут удалены без возможности восстановления.
Удаляем по шаблону
Для поиска образов, содержащих некоторый шаблон в их именах, введите:
-a отображает все образы, в том числе неактивные и промежуточные. grep фильтрует вывод, чтобы отобразить только те образы, в именах которых содержится указанный шаблон (соответственно, введите его вместо "pattern", сохранив кавычки).
А чтобы избавиться от них, введите:
awk '{print $3}' отображает только третий столбец вывода, содержащий идентификаторы. xargs docker rmi нужен, чтобы передать идентификаторов в docker rmi, удаляющей данные образы. xargs разбивает список идентификаторов образов на отдельные аргументы. Если вы пытаетесь удалить несколько образов, перечисляя их идентификаторы вручную, вы можете столкнуться с проблемой, если идентификаторы содержат пробелы или другие специальные символы. В этом случае использование xargs более безопасно и удобно.
Для удаления используемых образов введите:
Это остановит и уничтожит контейнеры перед удалением образов.
Удаляем все образы
Для отображения списка всех образов, которые находятся на локальной машине, включая не используемые в данный момент, вводим:
Далее для удаления всех неактивных образов на локальной машине вводим:
Эта команда выводит список идентификаторов всех образов на локальной машине и передает его в качестве аргумента docker rmi, которая удаляет все Docker-образы без возможности восстановления. А чтобы удалить и активные, используемые контейнерами, вводим:
Как удалить контейнеры Docker
В этой части рассмотрим все основные инструкции по удалению определенного количества контейнеров с заданными параметрами или без них.
Удаляем определенные контейнеры
Для начала вводим:
Теперь вводим инструкцию для удаления:
Для ее корректного использования замените Name_or_ID соответствующим количеством ID или имен (несколько объектов следует указывать через пробел).
Также для удаления контейнера он должен быть остановлен. Если контейнер запущен, то сначала вводим:
А для уничтожения всех объектов этого типа на локальной машине введите:
Удаляем контейнеры при выходе
Для запуска нового контейнера на основе указанного образа введите, заменив имя на нужное:
Флаг --rm указывает Docker на удаление после остановки.
Теперь небольшое пояснение. По умолчанию созданный контейнер остается на локальной машине после остановки. И если вы не хотите сохранять контейнер, то задействуйте флаг --rm. Это очень удобно при запуске временных контейнеров для выполнения какой-то задачи, например, запуска тестов, когда вы не хотите оставлять за собой «мусор». А для сохранения данных помогут такие флаги, как -v для монтирования томов или -e для передачи переменных среды.
Удаляем все запущенные контейнеры
Сначала вводим:
Флаг -f status=exited здесь фильтрует вывод.
Теперь для удаления вводим:
Удаляем контейнеры по нескольким фильтрам
Чтобы вывести контейнеры со статусами exited (остановлены) и created (созданы), то есть не запущенные и не работающие в данный момент, введите:
Флаги -a и -f здесь указывают Docker на отображение всех контейнеров и их фильтрацию.
Теперь для удаления всех объектов, которые находятся в состояниях exited или created, введите:
Удаляем по шаблону
Для получения перечня контейнеров на локальной машине, а затем фильтрации списка, чтобы отобразить только те объекты, в именах которых есть определенный шаблон, введите, заменив "pattern" на нужный шаблон, сохраняя кавычки:
Теперь для удаления объектов, в именах которых есть строка "pattern", вводим:
Эта инструкция использует grep для фильтрации списка, awk '{print $1}' для извлечения первого столбца (идентификатора), а затем передает идентификаторы, используя xargs. Добавим, что docker ps -a | grep "pattern" может выводить не только имена, но и другую информацию: статус, ID и т.д. Поэтому для удаления объектов, в указанных параметрах которых есть строка "pattern", задействуйте инструкцию выше.
Останавливаем и удаляем все контейнеры
Для получения перечня контейнеров на локальной машине, включая не запущенные в данный момент, вводим знакомую инструкцию:
Она покажет информацию о каждом объекте: идентификатор, имя, статус, задействованные ресурсы и т.д.
Для остановки всех контейнеров на локальной машине вводим:
И теперь удаляем их, вот так:
Как удалить тома Docker
В завершающей главе рассмотрим основные инструкции по удалению определенного количества томов с заданными параметрами или без них.
Удаляем определенные тома
Для получения перечня томов на локальной машине введите:
Команда выводит список имеющихся томов, включая информацию о них (ID, имена).
Для удаления определенного числа томов с заданными именами введите, добавив имя нужного тома вместо vlm_name:
Эта команда принимает разное количество аргументов. Для удаления нескольких объектов перечислите их названия через пробел:
Если тома используются контейнерами, находящимися в работающем состоянии, их нельзя удалить, пока эти контейнеры не будут остановлены или удалены. Попытки уничтожить такие объекты будут сопровождаться выводом ошибки.
Удаляем висячие тома
Для получения перечня висячих томов на локальной машине введите:
Инструкция выводит их перечень, включая их ID и имена. Теперь можно избавиться от них, введя:
Удалению подвергнутся все объекты данного типа, не ассоциированные ни с одним контейнером и не использующиеся на текущий момент.
Удаляем контейнер и его тома
Чтобы удалить тома, которые были созданы автоматически, вводим:
Флаг -v здесь указывает Docker на необходимость удаления всех связанных томов. Дело в том, что такие тома сохраняются на локальной машине, если не будут удалены явно. Поэтому такая операция может быть полезна для освобождения занимаемого не используемыми томами места на локальной машине.
Подготовили для вас выгодные тарифы на облачные серверы
477 ₽/мес
657 ₽/мес
Заключение
В завершение отметим, что перед тем, как выполнять инструкции по удалению образов, контейнеров и томов, нужно убедиться, что удаляемые объекты больше не потребуются вам или членам вашей команды. Ведь все эти операции — необратимые. А на этом всё, желаем успехов в работе с Docker!
