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