Удаление образов, контейнеров и томов 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 rmi, docker rm и docker volume rm.
Tags: Docker