Как удалить образы Docker, контейнеры и тома

Введение

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

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

Как использовать этот справочник:

  • Этот справочник представлен в формате шпаргалки с самодостаточными фрагментами командной строки.
  • Перейдите к любому разделу, который соответствует задаче, которую вы пытаетесь выполнить.

Примечание: Синтаксис подстановки команд, команда $(команда), используемый в командах, доступен во многих популярных оболочках, таких как bash, zsh и Windows Powershell.Если вы хотите способ развернуть приложение Docker на живом сервере одним нажатием кнопки, посмотрите на Платформу приложений DigitalOcean.

Если вы хотите быстрый способ развернуть приложение Docker на живом сервере с одной кнопкой, ознакомьтесь с DigitalOcean App Platform.

Очистка всех неиспользуемых или висящих образов, контейнеров, томов и сетей

Docker предоставляет одну команду, которая очистит любые ресурсы — образы, контейнеры, тома и сети — которые висит (не помечены или не связаны с контейнером):

docker system prune

Для удаления дополнительно любых остановленных контейнеров и всех неиспользуемых образов (не только висящих образов), добавьте флаг -a к команде:

docker system prune -a

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

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

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

Список:

docker images -a

Удалить:

docker rmi Image Image

Примечание: Флаг -a или --all в команде docker images отображает все Docker-изображения, включая промежуточные, которые не ссылаются на какие-либо теги. По умолчанию docker images показывает только изображения с хотя бы одним тегом. Однако могут быть некоторые изображения без тегов, которые все еще занимают место на диске системы. Флаг -a может быть полезен для идентификации изображений, которые можно обрезать для экономии места на диске. При использовании с командой docker rmi также можно использовать флаг -f или --force для удаления изображений без тегов.

Удалить висячие Docker-изображения

Docker-изображения состоят из нескольких слоев. Висячие изображения – это слои, которые не имеют отношения к каким-либо помеченным изображениям. Они больше не служат никакой цели и занимают место на диске. Их можно найти, добавив флаг фильтра -f со значением dangling=true к команде docker images. Когда вы уверены, что хотите их удалить, вы можете использовать команду docker image prune:

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

Список:

docker images -f dangling=true

Удаление:

docker image prune

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

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

Список:

docker images -a |  grep "pattern"

Удаление:

docker images -a | grep "pattern" | awk '{print $1":"$2}' | xargs docker rmi

Удалите все изображения

Все образы Docker на системе можно просмотреть, добавив -a к команде docker images. Когда вы уверены, что хотите удалить их все, вы можете добавить флаг -q, чтобы передать идентификатор образа в docker rmi:

Список:

docker images -a

Удалить:

docker rmi $(docker images -a -q)

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

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

Используйте команду docker ps с флагом -a, чтобы найти имя или ID контейнеров, которые вы хотите удалить:

Список:

docker ps -a

Удалить:

docker rm ID_or_Name ID_or_Name

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

Если вы знаете заранее, что не захотите оставлять контейнер после завершения его использования, вы можете выполнить docker run --rm, чтобы автоматически удалить его по завершении:

Запустить и удалить:

docker run --rm image_name

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

Вы можете найти контейнеры, используя docker ps -a и отфильтровать их по их статусу: created, restarting, running, paused или exited. Для просмотра списка контейнеров со статусом exited используйте флаг -f для фильтрации по статусу. Когда вы убедитесь, что хотите удалить эти контейнеры, используйте -q, чтобы передать их идентификаторы в команду docker rm:

Список:

docker ps -a -f status=exited

Удалить:

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

Удалить контейнеры, используя более одного фильтра

Фильтры Docker могут быть объединены путем повторения флага фильтра с дополнительным значением. Это приводит к списку контейнеров, которые соответствуют любому из условий. Например, если вы хотите удалить все контейнеры, помеченные либо как created (состояние, которое может возникнуть, когда вы запускаете контейнер с недопустимой командой), либо как exited, вы можете использовать два фильтра:

Список:

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

Удалить:

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

Удалить контейнеры в соответствии с шаблоном

Вы можете найти все контейнеры, которые соответствуют шаблону, используя комбинацию docker ps и grep. Когда вы удовлетворены тем, что у вас есть список для удаления, вы можете использовать awk и xargs для передачи ID в docker rm. Обратите внимание, что эти утилиты не поставляются с Docker и не обязательно доступны на всех системах:

Список:

docker ps -a |  grep "pattern

Удалить:

docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm

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

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

Список:

docker ps -a

Удалить:

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

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

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

Используйте команду docker volume ls, чтобы найти имя или имена томов, которые вы хотите удалить. Затем вы можете удалить один или несколько томов с помощью команды docker volume rm:

Список:

docker volume ls

Удалить:

docker volume rm volume_name volume_name

Удалите висячие тома

Поскольку целью томов является существование независимо от контейнеров, когда контейнер удаляется, том не удаляется автоматически. Когда том существует и больше не подключен к каким-либо контейнерам, его называют висячим томом. Для их нахождения и подтверждения желания удалить их можно использовать команду docker volume ls с фильтром, чтобы ограничить результаты только висячими томами. Когда вы удовлетворены списком, вы можете удалить их все с помощью docker volume prune:

Список:

docker volume ls -f dangling=true

Удалить:

docker volume prune

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

Если вы создаете безымянный том, его можно удалить одновременно с контейнером с помощью флага -v. Обратите внимание, что это работает только с безымянными томами. Когда контейнер успешно удаляется, его идентификатор отображается. Обратите внимание, что никаких ссылок на удаление тома не делается. Если он безымянный, он молча удаляется из системы. Если он имеет имя, он молча остается присутствовать.

Удалить:

docker rm -v container_name

Заключение

Это руководство охватывает некоторые из общих команд, используемых для удаления образов, контейнеров и томов с помощью Docker. Существует множество других комбинаций и флагов, которые могут использоваться с каждым из них. Для подробного руководства по доступным возможностям смотрите документацию Docker для docker system prune, docker rmi, docker rm и docker volume rm. Если у вас есть типовые задачи по очистке, которые вы хотели бы видеть в руководстве, пожалуйста, спрашивайте или делайте предложения в комментариях.

Для подробного изучения различных компонентов контейнера Docker ознакомьтесь с Экосистемой Docker: Введение в Общие Компоненты.

Source:
https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes