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

Шпаргалка Докер

Вступление

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

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

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

  • Это руководство в формате шпаргалки с отдельными фрагментами командной строки

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

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

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

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

docker system prune

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

docker system prune -a

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

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

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

Список:

docker images -a

Удалить:

docker rmi Image Image

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

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

Note: If you build an image without tagging it, the image will appear on the list of dangling images because it has no association with a tagged image. You can avoid this situation by https://docs.docker.com/engine/reference/commandline/build//tag-image—​t[providing a tag] when you build, and you can retroactively tag an images with the docker tag command.
#

Список:

docker images -f dangling=true

Удалить:

docker images purge

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

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

Список:

docker images -a |  grep "pattern"

Удалить:

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

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

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

Список:

docker images -a

Удалить:

docker rmi $(docker images -a -q)

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

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

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

Список:

docker ps -a

Удалить:

docker rm ID_or_Name ID_or_Name

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

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

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

docker run --rm image_name

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

Вы можете найти контейнеры с помощьюdocker ps -a и отфильтровать их по статусу: созданы, перезапускаются, запущены, приостановлены или завершены. Чтобы просмотреть список закрытых контейнеров, используйте флаг-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 для передачи идентификатораdocker rmi. Обратите внимание, что эти утилиты не поставляются Docker и не обязательно доступны во всех системах:

Список:

docker ps -a |  grep "pattern”

Удалить:

docker ps -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

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

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

Список:

docker ps -a

Удалить:

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

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

Удалите один или несколько определенных томов - Docker 1.9 и более поздние

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

Список:

docker volume ls

Удалить:

docker volume rm volume_name volume_name

Удалите свисающие тома - Docker 1.9 и более поздние версии.

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

Список:

docker volume ls -f dangling=true

Удалить:

docker volume prune

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

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

Удалить:

docker rm -v container_name

Заключение

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