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

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

Вы можете удалять появившиеся структуры руками, но лучше оптимизировать эту задачу через командную строку.

Удаление контейнеров

Перейдите во вкладку «Containers/Apps» (веб Docker Desktop). Укажите, что нужно сделать с элементами и примените:

Также, способ, использую консоль. Команда для удаления — docker container rm. Синтаксис:

  • docker container rm [параметры удаления] [ID объектов]

Параметры — (—force/-f — удаление контейнера в принудительном порядке), (—link/-l — удалить связь между элементами), (—volume/-v — удалить неопределенные тома, которые связаны с контейнером). ID получите с помощью команды — docker ps.

Параметры:

  • —-all или -a: выводим все работающие контейнеры
  • —filter или -f: фильтрация флагов
  • —format: формат вывода
  • —last или -n: вывод информации о последних n контейнерах
  • —latest или -l: вывод информации о последнем контейнере
  • —no-trunc: полный вывод
  • —quiet или -q: отдельный вывод идентификационного номера
  • —size или -s: вывод размера

С этими параметрами можно гибко взаимодействовать с группой контейнеров или отдельными единицами. Например, чтобы создать списки контейнеров на удаление — docker ps -a -f status=created -f status=exited, чтобы удалить — docker container  rm $(docker ps -a -f status=created -f status=exited -q). Перед удалением лучше остановить предполагаемые контейнеры. Чтобы удалить все контейнеры:

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

Удаление образов

Перейдите во вкладку «Images».

Чтобы удалить, найдите «Clean up…», выберите образы для удаления. Если образ в работе, просто удалить его не получится.

Через командную строку

docker rmi [параметры удаления] [ID образов]

Параметры:

  • —force или -f: удалить образ в принудительном порядке 
  • —no-prune: не удалять непомеченные 

Узнать ID образа:

  • docker images [параметры] [REPOSITORY:[TAG]]

Параметры:

  • —all или -a: выводим все образы. По умолчанию промежуточные будут скрыты;
  • —digests: выводим дайджесты;
  • —filter или -f: фильтр по флагам;
  • —format: формат вывода;
  • —no-trunc: не обрезать вывод;
  • —quiet или -q: выводим только идентификаторы;

Запросите нужный список образов и используйте его как параметр для команды docker rmi. В качестве примера избавимся от образов, не привязанных к контейнерам. Для этого воспользуемся флагом dangling=true — docker images –filter dangling=true. Чтобы удалить список — docker rmi $(docker images –filter dangling=true -q). Чтобы удалить неработающие образы — команда docker image prune.

Удаление томов

Том — это файловая система, которая находится вне контейнеров, размещенная на хост-машине. Если вы хотите освободить пространство на диске от них, перейдите в раздел «Volumes», в правом верхнем углу выберите:

Чтобы удалить тома: docker volume rm [параметры] [имена томов]

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

docker volume ls [параметры] — команда для определения имени тома. Параметры:

  • —filter или -f: фильтр по флагам
  • —format: формат вывода
  • —quiet или -q: выводим только имена

Чтобы стереть тома, несвязанные с контейнерами — docker volume ls -f dangling=true. Команда для запуска удаления — docker volume rm $(docker volume ls -f dangling=true -q). Но можно обойтись и другой командой для удаления таких томов: docker volume prune.

Удалить сети

Чтобы удалить сети в Docker, используйте команду «docker network rm» со следующим синтаксисом:

docker network rm [Сетевые имена/идентификаторы]

Эта команда не имеет параметров. Вы можете передавать как имена, так и идентификаторы. Чтобы узнать имена и идентификаторы сетей, используйте «docker network ls»:

docker network ls [параметры]

Есть 4 параметра:

  • —filter или -f: фильтровать по флагам
  • —format: выходной формат
  • —no-trunc: не обрезать вывод
  • —quiet или -q: показать только идентификаторы

Перед удалением сети необходимо удалить объекты, которые ее используют. Чтобы узнать, какие контейнеры используют конкретную сеть, используйте следующую команду:

docker ps -f network=[ID сети]

После этого можно приступать к удалению сети. Например, чтобы удалить сети со значением driver=bridge:

docker network ls -f driver=bridge

docker network rm $(docker network ls -f driver=bridge -q)

Очистка Docker от всех объектов

Сначала остановить и удалить все контейнеры:

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

Удалить все образы:

  • docker rmi $(docker images -a -q)

Удалить все тома:

  • docker volume rm $(docker volume ls -a -q)

Удалить все сети:

  • docker network rm $(docker network ls -a -q)