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

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

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
13 мая 2022 г.
11908
7 минут чтения
Средний рейтинг статьи: 2.8

Docker — это программное обеспечение для быстрой развертки приложений за счет контейнеризации. Но при его активном использовании накапливается большое количество различных объектов, тратящих ценные ресурсы хоста: образы, контейнеры, тома и сети. 

Удаление Образов, Контейнеров, Томов И Сети Docker (1)

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

Кстати, в Timeweb Cloud можно выгодно арендовать сервер с Docker.

New Documentation

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

Для того, чтобы взаимодействовать с контейнерами и изменять их текущее состояние, в том числе и удалять их, переходим на вкладку «Containers/Apps» веб-интерфейса Docker Desktop, выбираем нужный объект и применяем к нему выбранные нами действия:

Image2

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

Для удаления контейнеров используется команда docker container rm или просто docker rm. Для наглядности будем использовать docker container rm с таким синтаксисом:

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

Параметры:

  • --force или -f: принудительное устранение контейнера (например, если он работает);
  • --link или -l: удалить указанную ссылку (например, между двумя объектами)*;
  • --volume или -v: удалить связанные с контейнером анонимные тома;

*Контейнеры изолированы друг от друга. Один из способова связи между ними — через сетевые порты. Используя флаг --link, вы удалите эту связь в сети Docker.

Где взять ID? Для получения такой информации в арсенале командной строки имеется две команды: docker ps и docker container ls. Они имеют одинаковые параметры и синтаксис:

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

Манипулируя этими параметрами, пользователь может создать список контейнеров, которые он хочет удалить, после чего передать его ID команде docker container rm. Например, создать список объектов с флагами created или exited. Для это выполним эту команду для получения списка таких объектов:

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

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

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

Для удаления запущенных контейнеров необходимо предварительно остановить их. Конечно, можно воспользоваться --force, но это может привести к повреждениям данных, с которыми работает приложение. Всегда лучше сначала остановить контейнеры с помощью команды docker stop. Чтобы в docker удалить все контейнеры, достаточно этих двух команд:

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

Существует отдельная команда, с помощью которой можно удалить все остановленные контейнеры: docker container prune.

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

Как и контейнеры, образы Docker можно удалить внутри клиент-приложения. Для этого переходим на вкладку образов или «Images»:

Image3

Для удаления нажимаем в верхнем правом углу «Clean up…» и выбираем нужные нам образы. Если образ в текущий момент используется в работе, то докер не позволит его удалить. Теперь перейдем к инструментам командной строки.

За удаление образов Docker отвечает две команды: docker rmi и docker image rm. Они идентичны и работают примерно также, как и docker rm. Вот их синтаксис:

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

Параметры у неё такие:

  • --force или -f: принудительно удалить образ;
  • --no-prune: не удалять непомеченные (не связанные по TAG) родителей;

Для того, чтобы узнать 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» и в правом верхнем углу выбираем соответствующую иконку:

Image1

За удаление томов в командной строке отвечает docker volume rm с таким синтаксисом: 

docker volume rm [параметры] [имена томов]

На параметры эта команда не щедра и предоставляет лишь принудительное удаление с помощью флага --force или -f. Удалить можно только те тома, что не связаны с работающими контейнерами. Использовать принудительное удаление нежелательно для томов, связанных с работающими контейнерами, поскольку это может привести к повреждению данных.

Для того, чтобы узнать имена томов, воспользуемся командной docker volume ls. Синтаксис следующий:

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

И снова докер оказывается жадным на параметры. Предусмотрено 3 параметра:

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

Тома существуют вне контейнеров и после их удалении остаются в файловой системе хоста и становятся несвязанными. Попробуем удалить такие тома. Для этого воспользуемся флагом dangling=true:

docker volume ls -f dangling=true

Теперь передаём результаты в команду для их удаления:

docker volume rm $(docker volume ls -f dangling=true -q)

Но можно обойтись и другой командой для удаления таких томов: docker volume prune. Она удаляет все неиспользуемые тома. Однако, перед использованием, всё же стоит проверить список и убедиться в нём.

Если вам нужно избавиться от безымянного тома, то его можно удалить вместе с его контейнером. Для этого при выполнении docker rm необходимо добавить параметр -v.

Удаляем сети

Чтобы удалить сети, необходимо воспользоваться командой docker network rm с таким синтаксисом:

docker network rm [Имена/ID сетей]

У этой команды параметры отсутствуют. Ей можно передавать как имена, так ID. Для того, чтобы узнать имена и ID сетей, необходимо воспользоваться 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, можно составить перечень команд, которые позволят очистить его от всех объектов и работать с ним, как с новым:

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

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

2. Удаляем образы:

docker rmi $(docker images -a -q)

3. Удаляем тома:

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

4. Удаляем сети:

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

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону