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

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

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

Как пользоваться руководством?

Необязательно выполнять все разделы последовательно; выполняйте только необходимые разделы.

Синтаксис команд command $(command) доступен во многих популярных оболочках (bash, zsh, Windows Powershell).

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

Удаление конкретного образа

Команда docker images с флагом –a позволяет узнать ID образа, который нужно удалить. Она отображает все образы, включая промежуточные уровни. Определив образы, которые нужно удалить, вы можете передать их ID команде docker rmi:

docker images -a
docker rmi Image1 Image2

Удаление недействительных образов

Образы Docker состоят из нескольких уровней. Недействительные образы – это уровень образов, которые больше не имеют никакого отношения к образам с метками. Они впустую потребляют дисковое пространство. Чтобы найти такие образы, используйте команду docker images и флаг –f (filter) со значением dangling=true. Если вы уверены, что хотите удалить все эти образы, добавьте в команду docker rmi флаг –q и укажите ID образов через пробел.

docker images -f dangling=true

Чтобы найти и удалить образы:

docker rmi $(docker images -f dangling=true -q)

Примечание: Если при создании образа не были добавлены метки, такой образ также окажется в списке недействительных образов, так как у него нет никакой связи с метками. Чтобы избежать этого, добавляйте метки при сборке образа. Команда docker tag позволяет добавить метку после сборки образа.

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

С помощью команд docker images и grep можно найти все образы, соответствующие шаблону. Чтобы удалить все совпадающие с шаблоном образы, можно передать команде docker rmi ID всех образов с помощью команды awk. Имейте в виду: эти утилиты не предоставляются платформой Docker и не всегда доступны в системе по умолчанию.

docker ps -a |  grep "шаблон"

чтобы удалить образы:

docker images | grep "шаблон" | awk '{print $1}' | xargs docker rm

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

Чтобы просмотреть все доступные образы Docker, добавьте флаг -a в команду docker images.

docker images -a

Чтобы удалить все образы, добавьте флаг –q и передайте образы команде docker rmi:

docker rmi $(docker images -a -q)

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

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

Команда docker ps с флагом –a отображает все доступные контейнеры (их имена или ID).

docker ps -a

Чтобы удалить контейнер (или несколько контейнеров), передайте имя или ID команде docker rm:

docker rm ID_или_имя_контейнера ID_или_имя_контейнера1

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

Если при сборке контейнера вы точно знаете, что после выполнения задачи он станет ненужным, вы можете автоматически удалить его с помощью docker run –rm. Как только контейнер выполнит свою задачу и остановится, он будет удалён.

docker run --rm имя_контейнера

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

С помощью команды docker ps –a, флага –f и параметра status вы можете найти все доступные контейнеры, которые находятся в определённом состоянии: created, restarting, running, paused и exited. Например:

docker ps -a -f status=exited

Чтобы удалить все остановленные контейнеры, используйте флаг –q в команде docker rm и передайте ей ID контейнеров, которые нужно удалить:

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

Удаление контейнера с помощью нескольких фильтров

Фильтры Docker можно комбинировать. Для этого нужно просто повторно добавить флаг –f. К примеру, чтобы вывести все контейнеры со статусом created (контейнер был создан, но запущен с помощью неправильной команды) и exited, можно использовать команду:

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

Чтобы удалить эти контейнеры, нужно ввести:

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

Удаление контейнеров по шаблону

Поиск контейнеров по шаблону можно выполнить с помощью команд docker ps и grep.

docker ps -a |  grep "шаблон"

Найдя все контейнеры, которые соответствуют заданному шаблону, вы можете удалить их с помощью команд docker rmi, awk и xargs.

Примечание: Эти утилиты не всегда поставляются системой по умолчанию.

docker ps -a | grep "шаблон" | awk '{print $3}' | xargs docker rmi

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

Чтобы просмотреть все контейнеры в системе, введите:

docker ps -a

Чтобы удалить контейнеры, передайте их ID командам docker stop и docker rm с помощью флага –q:

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

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

Удаление конкретного тома (Docker 1.9 +)

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

docker volume ls

Чтобы удалить том, укажите его имя в команде docker volume rm. Чтобы удалить несколько томов, укажите их имена через пробел.

docker volume rm том1 том2 том3

Удаление недействительных томов (Docker 1.9 +)

Том должен существовать независимо от контейнера. Следовательно, когда контейнер удаляется, том не удаляется автоматически. Он остаётся в системе, хотя больше не обслуживает ни один контейнер. Такие тома считаются недействительными и просто занимают место на диске.

Чтобы найти такие тома, используйте команду:

docker volume ls -f dangling=true

Чтобы удалить недействительные тома, используйте:

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

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

Если вы создали безымянный том, вы можете удалить его вместе с контейнером с помощью флага –v.

Примечание: Это работает только с безымянными контейнерами!

Когда контейнер успешно удалён, на экране отображается его ID. При этом в команде никак не обозначается удаление контейнера. Если том не имеет имени, он будет просто удалён из системы. Если у тома есть имя, он останется в системе.

docker rm -v имя_контейнера

Заключение

Данное руководство предлагает вам общие команды по удалению контейнеров, образов и томов Docker 1.9 +. Существует множество полезных комбинаций и флагов, которые не были описаны в этой статье. Узнать о доступных опциях можно в документации Docker для команд docker rmidocker rm и docker volume rm.

Tags:

Добавить комментарий