ZaLinux.ru

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

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

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

Как пользоваться этой инструкцией:

  • Эту инструкцию не нужно выполнять пошагово – перейдите к тому разделу, который подходит для вашей задачи.
  • В этой инструкции применяются команды с подстановкой:
command $(command)

Эта запись означает, что результат выполнения команды $(command) передаётся в качестве аргументов для выполнения команде command.

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

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

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

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

Получение списка:

docker images -a

Удаление:

docker rmi Image Image

Удаление «висячих» (dangling) образов

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

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

Вывод списка:

docker images -f dangling=true

Удаление:

docker rmi $(docker images -f dangling=true -q)

Удаление образов в соответствии с образцом

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

Получение списка:

docker ps -a |  grep "pattern"

Удаление:

docker images | grep "pattern" | awk '{print $1}' | xargs docker rm

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

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

Получение списка:

docker ps -a |  grep "pattern”

Удаление:

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

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

Просмотреть все контейнеры на вашей системе вы можете с docker ps. Добавление флаг -a покажет все контейнеры. Когда вы уверены, что вы хотите удалить их, добавьте флаг -q для передачи ID в команды 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 и выше

Поскольку по своей сути тома должны существовать независимо от контейнеров, когда контейнер удаляется, том при этом не удаляется автоматически. Когда существует том не соединённый больше ни с каким из контейнеров, то он называется висячий (dangling) том. Для их обнаружения можно использовать команду docker volume ls с фильтром для ограничения результатов висячими томами. Когда вы удовлетворены результатами, вы можете добавить флаг -q для передачи имён томов в docker volume rm:

Получение списка:

docker volume ls -f dangling=true

Удаление:

docker volume rm $(docker volume ls -f dangling=true -q)

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

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

Удаление:

docker rm -v container_name

Заключение

Эта инструкция описала некоторые из популярных команд, используемых для удаления образов, контейнеров и томов начиная с Docker 1.9. Имеется много других комбинаций и флагов, которые могут использоваться для этих целей. Чтобы узнать их, посмотрите документацию Docker по docker rmi, docker rm и docker volume rm.

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *