Введение
Docker позволяет легко упаковывать приложения и службы в контейнеры, чтобы их можно было запускать где угодно. Однако при работе с Docker также легко накопить чрезмерное количество неиспользуемых образов, контейнеров и объемов данных, которые загромождают вывод и занимают место на диске.
Docker предлагает все инструменты, необходимые для очистки вашей системы из командной строки. В этом руководстве по стилю шпаргалки содержится краткий справочник по командам, которые полезны для освобождения места на диске и поддержания порядка в системе путем удаления неиспользуемых образов, контейнеров и томов Docker.
Как пользоваться этим руководством:
- Это руководство представлено в формате шпаргалки с отдельными фрагментами командной строки.
- Перейдите к любому разделу, относящемуся к деятельности, которую вы пытаетесь выполнить.
Синтаксис замены command $(command)
, используемый в командах, доступен во многих популярных оболочках, таких как bash, zsh и Windows Powershell.
Удалите все неиспользуемые или приостановленные образы, контейнеры, тома и сети.
Docker предоставляет единственную команду, которая очистит все ресурсы (образы, контейнеры, тома и сети), которые зависли (не связаны с контейнером):
docker system prune
Чтобы еще больше удалить все неподвижные контейнеры и любые неиспользуемые изображения (не только ожидающие изображения), добавьте в команду флаг -a
:
docker system prune -a
Удалить образы Docker
Удалите одно или несколько определенных изображений.
Используйте команду docker images
с флагом -a
, чтобы найти идентификатор образов, которые вы хотите удалить. Это покажет вам каждое изображение, включая промежуточные слои изображения. Когда вы найдете изображения, которые хотите удалить, вы можете передать их идентификатор или тег в docker rmi
:
Перечислите изображения:
docker images -a
Удалить изображения:
docker rmi Image Image
Удалить висящие изображения
Образы Docker состоят из нескольких слоев. Ожидающие изображения — это слои, которые не имеют отношения ни к какому изображению с тегами. Они больше не служат цели и занимают место на диске. Их можно найти, добавив флаг фильтра -f
со значением dangling=true
в команду docker images
. Когда вы уверены, что хотите удалить их, вы можете использовать команду docker images purge
:
Примечание. Если вы создадите образ без тега, он появится в списке ожидаемых изображений, поскольку он не связан с тегированным изображением. Вы можете избежать этого , предоставив тег во время создания, и вы можете задним числом пометить образ с помощью команды docker tag.
Список ожидающих изображений:
docker images -f dangling=true
Удалить ожидающие изображения:
docker image prune
Удаление изображений по шаблону
Вы можете найти все образы, соответствующие шаблону, используя комбинацию docker images
и grep
. Если вы уверены, вы можете удалить их, используя awk
для передачи идентификаторов в docker rmi
. Обратите внимание, что эти утилиты не предоставляются Docker и не обязательно доступны во всех системах:
Список изображений с помощью grep:
docker images -a | grep "pattern"
Удалить изображения с помощью grep и awk:
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
.
Список всех контейнеров Exited:
docker ps -a -f status=exited
Удалите все контейнеры 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
Удаление приостановленных томов — Docker 1.9 и более поздние версии
Поскольку точка томов не должна зависеть от контейнеров, при удалении контейнера том не удаляется автоматически одновременно. Когда том существует и больше не привязан к какому-либо контейнеру, он называется висячим томом. Чтобы найти их и подтвердить, что вы хотите их удалить, вы можете использовать команду 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
.