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

Удалить/очистить все данные Докера (контейнеры, образы, тома и сети)

Одной строкой

docker stop $(docker ps -qa) && docker rm $(docker ps -qa) && docker rmi -f $(docker images -qa) && docker volume rm $(docker volume ls -q) && docker network rm $(docker network ls -q)

Описание команд

👎 Остановка всех контейнеров

docker stop $(docker ps -qa)

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

docker rm $(docker ps -qa)

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

docker rmi -f $(docker images -qa)

👋 Удаление всех томов

docker volume rm $(docker volume ls -q)

✋ Удаление всех сетей

docker network rm $(docker network ls -q)

Ваша инсталяция должна быть чиста 😊

👇 Следующие команды не должны выводить какие-либо элементы:

👉 Следующая команда показывает только сети по умолчанию:

:: Следующая команда удаляет неиспользуемые образы

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

И надо сказать, что в Докере есть достаточно возможностей, чтобы периодически чистить систему, причем делать это можно непосредственно из командной строки. И когда вы запомните приведенные ниже команды, процесс очистки будет ненамного сложнее, чем использование «корзины» в ОС. И не забудьте заглянуть в «Заключение», которое обычно читают редко, но в данном случае мы решили включить туда полезное предостережение.

cloud

Удаляем все объекты

Сначала приведем команду, которая удаляет всё, включая и так называемые «висячие» объекты:

docker system prune

А для удаления остановленных объектов потребуется флаг -a, вот так:

docker system prune -a

Не используемые более образы уничтожаются так:

docker image prune -a

Эта команда включает также дочерние образы и метаданные.

Теперь избавляемся от всех контейнеров:

docker container prune

И, наконец, убираем тома:

docker volume prune

Чтобы убедиться, что вы удаляете правильные объекты, задействуйте флаги --dry-run или -n для просмотра объектов без их фактического уничтожения. Кроме того, эти команды удаляют объекты без возможности восстановления. Поэтому перед выполнением приведенных выше (и ниже) инструкций удостоверьтесь, что вы понимаете, какие объекты будут удалены, и вы не удаляете что-то важное.

Здесь рассмотрим основные инструкции по удалению определенного количества образов с заданными параметрами или без них.

Удаляем определенные образы

Для этого сначала вводим:

docker images -a

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

Далее вводим:

docker rmi Img Img

Вместо Img подставьте название для удаления. Несколько названий следует указывать через пробел.

Удаляем «висячие» образы

Чтобы получить перечень неиспользуемых образов (такие объекты также называются «висячими»), вводим:

docker images -f dangling=true

Такие образы могут возникать при создании новых на основе старых с тем же именем, но без тега. В этом случае старый образ становится висячим и не используется. -f фильтрует объекты по различным критериям, в данном случае мы выполняем фильтрацию, задав dangling=true.

Теперь для удаления неиспользуемых образов вводим:

docker image prune

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

Удаляем по шаблону

Для поиска образов, содержащих некоторый шаблон в их именах, введите:

docker images -a | grep "pattern"

-a отображает все образы, в том числе неактивные и промежуточные. grep фильтрует вывод, чтобы отобразить только те образы, в именах которых содержится указанный шаблон (соответственно, введите его вместо "pattern", сохранив кавычки).

А чтобы избавиться от них, введите:

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

awk '{print $3}' отображает только третий столбец вывода, содержащий идентификаторы. xargs docker rmi нужен, чтобы передать идентификаторов в docker rmi, удаляющей данные образы. xargs разбивает список идентификаторов образов на отдельные аргументы. Если вы пытаетесь удалить несколько образов, перечисляя их идентификаторы вручную, вы можете столкнуться с проблемой, если идентификаторы содержат пробелы или другие специальные символы. В этом случае использование xargs более безопасно и удобно.

Для удаления используемых образов введите:

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

Это остановит и уничтожит контейнеры перед удалением образов.

Удаляем все образы

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

docker images -a

Далее для удаления всех неактивных образов на локальной машине вводим:

docker rmi $(docker images -a -q)

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

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

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

В этой части рассмотрим все основные инструкции по удалению определенного количества контейнеров с заданными параметрами или без них.

Удаляем определенные контейнеры

Для начала вводим:

docker ps -a

Теперь вводим инструкцию для удаления:

docker rm Name_or_ID

Для ее корректного использования замените Name_or_ID соответствующим количеством ID или имен (несколько объектов следует указывать через пробел).

Также для удаления контейнера он должен быть остановлен. Если контейнер запущен, то сначала вводим:

docker stop Name_or_ID

А для уничтожения всех объектов этого типа на локальной машине введите:

docker rm $(docker ps -a -q)

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

Для запуска нового контейнера на основе указанного образа введите, заменив имя на нужное:

docker run --rm image_name

Флаг --rm указывает Docker на удаление после остановки.

Теперь небольшое пояснение. По умолчанию созданный контейнер остается на локальной машине после остановки. И если вы не хотите сохранять контейнер, то задействуйте флаг --rm. Это очень удобно при запуске временных контейнеров для выполнения какой-то задачи, например, запуска тестов, когда вы не хотите оставлять за собой «мусор». А для сохранения данных помогут такие флаги, как -v для монтирования томов или -e для передачи переменных среды.

Удаляем все запущенные контейнеры

Сначала вводим:

docker ps -a -f status=exited

Флаг -f status=exited здесь фильтрует вывод.

Теперь для удаления вводим:

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

Удаляем контейнеры по нескольким фильтрам

Чтобы вывести контейнеры со статусами exited (остановлены) и created (созданы), то есть не запущенные и не работающие в данный момент, введите:

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

Флаги -a и -f здесь указывают Docker на отображение всех контейнеров и их фильтрацию.

Теперь для удаления всех объектов, которые находятся в состояниях exited или created, введите:

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

Удаляем по шаблону

Для получения перечня контейнеров на локальной машине, а затем фильтрации списка, чтобы отобразить только те объекты, в именах которых есть определенный шаблон, введите, заменив "pattern" на нужный шаблон, сохраняя кавычки:

docker ps -a | grep "pattern"

Теперь для удаления объектов, в именах которых есть строка "pattern", вводим:

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

Эта инструкция использует grep для фильтрации списка, awk '{print $1}' для извлечения первого столбца (идентификатора), а затем передает идентификаторы, используя xargs. Добавим, что docker ps -a | grep "pattern" может выводить не только имена, но и другую информацию: статус, ID и т.д. Поэтому для удаления объектов, в указанных параметрах которых есть строка "pattern", задействуйте инструкцию выше.

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

Для получения перечня контейнеров на локальной машине, включая не запущенные в данный момент, вводим знакомую инструкцию:

docker ps -a

Она покажет информацию о каждом объекте: идентификатор, имя, статус, задействованные ресурсы и т.д.

Для остановки всех контейнеров на локальной машине вводим:

docker stop $(docker ps -a -q)

И теперь удаляем их, вот так:

docker rm $(docker ps -a -q)

Как удалить тома Docker

В завершающей главе рассмотрим основные инструкции по удалению определенного количества томов с заданными параметрами или без них.

Удаляем определенные тома

Для получения перечня томов на локальной машине введите:

docker volume ls

Команда выводит список имеющихся томов, включая информацию о них (ID, имена).

Для удаления определенного числа томов с заданными именами введите, добавив имя нужного тома вместо vlm_name:

docker volume rm vlm_name

Эта команда принимает разное количество аргументов. Для удаления нескольких объектов перечислите их названия через пробел:

docker volume rm my_volume1 my_volume2

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

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

Для получения перечня висячих томов на локальной машине введите:

docker volume ls -f dangling=true

Инструкция выводит их перечень, включая их ID и имена. Теперь можно избавиться от них, введя:

docker volume prune

Удалению подвергнутся все объекты данного типа, не ассоциированные ни с одним контейнером и не использующиеся на текущий момент.

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

Чтобы удалить тома, которые были созданы автоматически, вводим:

docker rm -v container_name

Флаг -v здесь указывает Docker на необходимость удаления всех связанных томов. Дело в том, что такие тома сохраняются на локальной машине, если не будут удалены явно. Поэтому такая операция может быть полезна для освобождения занимаемого не используемыми томами места на локальной машине.

Заключение

В завершение отметим, что перед тем, как выполнять инструкции по удалению образов, контейнеров и томов, нужно убедиться, что удаляемые объекты больше не потребуются вам или членам вашей команды. Ведь все эти операции — необратимые. А на этом всё, желаем успехов в работе с Docker!

Время на прочтение5 мин

Количество просмотров780K

Прим. перев.: Неделю назад Aymen El Amri, руководящий компанией eralabs и создавший обучающий курс «Безболезненный Docker», опубликовал свой Docker Cheat Sheet — шпаргалку по основным командам Docker. Git-репозиторий этого документа на GitHub уже набрал 1000+ stars и несколько сторонних контрибьюторов, что подтвердило его актуальность и пользу.

Представленные здесь команды описаны минимально (с акцентом на читаемость как есть) и включают в себя установку Docker, работу с реестрами и репозиториями, контейнерами, образами, сетью, Docker Swarm. Ниже представлен перевод шпаргалки в её состоянии на 2 сентября с дополнениями из комментариев ниже.

Установка

Linux

curl -sSL https://get.docker.com/ | sh

Mac

Скачайте dmg по этой ссылке:

https://download.docker.com/mac/stable/Docker.dmg

Windows

Используйте MSI-инсталлятор:

https://download.docker.com/win/stable/InstallDocker.msi

Реестры и репозитории Docker

Вход в реестр

docker login

docker login localhost:8080

Выход из реестра

docker logout

docker logout localhost:8080

Поиск образа

docker search nginx

docker search nginx -- filter stars=3 --no-trunc busybox

Pull (выгрузка из реестра) образа

docker pull nginx

docker pull eon01/nginx localhost:5000/myadmin/nginx

Push (загрузка в реестр) образа

docker push eon01/nginx

docker push eon01/nginx localhost:5000/myadmin/nginx

Первые действия с контейнерами

Создание контейнера

docker create -t -i eon01/infinite --name infinite

Первый запуск контейнера

docker run -it --name infinite -d eon01/infinite

Переименование контейнера

docker rename infinite infinity

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

docker rm infinite

Обновление контейнера

docker update --cpu-shares 512 -m 300M infinite

Запуск и остановка контейнеров

Запуск остановленного контейнера

docker start nginx

Остановка

docker stop nginx

Перезагрузка

docker restart nginx

Пауза (приостановка всех процессов контейнера)

docker pause nginx

Снятие паузы

docker unpause nginx

Блокировка (до остановки контейнера)

docker wait nginx

Отправка SIGKILL (завершающего сигнала)

docker kill nginx

Отправка другого сигнала

docker kill -s HUP nginx

Подключение к существующему контейнеру

docker attach nginx

Получение информации о контейнерах

Работающие контейнеры

docker ps

docker ps -a

Логи контейнера

docker logs infinite

Информация о контейнере

docker inspect infinite

docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -q)

События контейнера

docker events infinite

Публичные порты

docker port infinite

Выполняющиеся процессы

docker top infinite

Использование ресурсов

docker stats infinite

Изменения в файлах или директориях файловой системы контейнера

docker diff infinite

Управление образами

Список образов

docker images

Создание образов

docker build .

docker build github.com/creack/docker-firefox

docker build - < Dockerfile

docker build - < context.tar.gz

docker build -t eon/infinite .

docker build -f myOtherDockerfile .

curl example.com/remote/Dockerfile | docker build -f - .

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

docker rmi nginx

Загрузка репозитория в tar (из файла или стандартного ввода)

docker load < ubuntu.tar.gz

docker load --input ubuntu.tar

Сохранение образа в tar-архив

docker save busybox > ubuntu.tar

Просмотр истории образа

docker history

Создание образа из контейнера

docker commit nginx

Тегирование образа

docker tag nginx eon01/nginx

Push (загрузка в реестр) образа

docker push eon01/nginx

Сеть

Создание сети

docker network create -d overlay MyOverlayNetwork

docker network create -d bridge MyBridgeNetwork

docker network create -d overlay \
  --subnet=192.168.0.0/16 \
  --subnet=192.170.0.0/16 \
  --gateway=192.168.0.100 \
  --gateway=192.170.0.100 \
  --ip-range=192.168.1.0/24 \
  --aux-address="my-router=192.168.1.5" --aux-address="my-switch=192.168.1.6" \
  --aux-address="my-printer=192.170.1.5" --aux-address="my-nas=192.170.1.6" \
  MyOverlayNetwork

Удаление сети

docker network rm MyOverlayNetwork

Список сетей

docker network ls

Получение информации о сети

docker network inspect MyOverlayNetwork

Подключение работающего контейнера к сети

docker network connect MyOverlayNetwork nginx

Подключение контейнера к сети при его запуске

docker run -it -d --network=MyOverlayNetwork nginx

Отключение контейнера от сети

docker network disconnect MyOverlayNetwork nginx

Очистка Docker

Удаление работающего контейнера

docker rm nginx

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

docker rm -v nginx

Удаление всех контейнеров со статусом exited

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

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

docker container prune

docker rm `docker ps -a -q`

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

docker container prune --filter "until=24h"

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

docker rmi nginx

Удаление неиспользуемых (dangling) образов

docker image prune

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

Удаление неиспользуемых (dangling) образов даже с тегами

docker image prune -a

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

docker rmi $(docker images -a -q)

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

docker rmi -f $(docker images | grep "^<none>" | awk "{print $3}")

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

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

Удаление неиспользуемых (dangling) томов

docker volume prune

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

Удаление неиспользуемых (dangling) томов по фильтру

docker volume prune --filter "label!=keep"

Удаление неиспользуемых сетей

docker network prune

Удаление всех неиспользуемых объектов

docker system prune

По умолчанию для Docker 17.06.1+ тома не удаляются. Чтобы удалились и они тоже:

docker system prune --volumes

Docker Swarm

Установка Docker Swarm

curl -ssl https://get.docker.com | bash

Прим. перев.: в Docker версий 1.12.0+ ничего дополнительно устанавливать не требуется, т.к. Docker Swarm встроен в Docker Engine в виде специального режима (Swarm mode).

Инициализация Swarm

docker swarm init --advertise-addr 192.168.10.1

Подключение рабочего узла (worker) к Swarm

docker swarm join-token worker

Подключение управляющего узла (manager) к Swarm

docker swarm join-token manager

Список сервисов

docker service ls

Список узлов

docker node ls

Создание сервиса

docker service create --name vote -p 8080:80 instavote/vote

Список заданий Swarm

docker service ps

Масштабирование сервиса

docker service scale vote=3

Обновление сервиса

docker service update --image instavote/vote:movies vote

docker service update --force --update-parallelism 1 --update-delay 30s nginx

docker service update --update-parallelism 5--update-delay 2s --image instavote/vote:indent vote

docker service update --limit-cpu 2 nginx

docker service update --replicas=5 nginx

P.S.

Прим. перев.: Напомню, что оригинальная (англоязычная) версия Docker Cheat Sheet доступна и обновляется в Git-репозитории. Автор будет рад исправлениям/пополнениям от сообщества.

Читайте также в нашем блоге:

  • «Техническая история Kubernetes: секреты создателя».
  • «Некоторые моменты switchover в Patroni. Практические истории из SRE-будней. Часть 8»
  • «Как запускать WebAssembly-приложения в Kubernetes с помощью Deckhouse».

Содержание

Введение
Остановить в Windows
Остановить в Linux
Удалить контейнеры
Удалить образы
Статьи про Docker

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

В Windows cmd

FOR /f «tokens=*» %i IN (‘docker ps -q’) DO docker stop %i

В Windows batch файле

FOR /f «tokens=*» %%i IN (‘docker ps -q’) DO docker stop %%i

В

Windows PowerShell

docker ps -q | % { docker stop $_ }

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

В

Linux

docker stop $(docker ps -aq)

или

sudo docker stop $(sudo docker ps -aq)

docker stop выполняется для всех контейнеров которые выводит команда
docker ps -a

Флаг q нужен для выполнения в фоновом режиме.
Он не является обязательным.

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

Нужно сделать то же самое, но вместо stop выполнить rm

Разберём для

Linux

docker rm $(docker ps -aq)

Альтернативный способ это system prune

docker system prune

WARNING! This will remove:
— all stopped containers
— all networks not used by at least one container
— all dangling images
— all dangling build cache

Are you sure you want to continue? [y/N] y
Deleted Containers:
60136dcc356d794d23aee10d3e6440fd53204ed88ad1c45f9bb70d0f66dd1cc4
85375f0f0e5e3d196ec7b11b4f7834aadee167de6c489ce4bf90b940ddec5ea8
33efc448ad6c67ee7e61336482dd7110a059e0c78d8b0a321f0f192ee26a048e

Deleted Images:
deleted: sha256:409d2b2d3c0b20cfb9556bb1e8c69c6e8e8b6120c3883396a5015f109f3f25cb
deleted: sha256:c26bbf7dc2369c5a9e316dbf6c8c0f79fd81b1dd92d5a4ee343060c96cabebf2
deleted: sha256:fcf59b2324beadaf9fc689bb205bc28915a78da42aee860bbb17bded2c54be13
deleted: sha256:c9952ac8387d7dc94e779d2663120f3e93a61a615b710fd7680f0dde63d0c411
deleted: sha256:7b5a2e67a82fb2512681822bfb4fae0b61c135b55ecc55b8fe0bc41ee7d60b40
deleted: sha256:bbdc7e06675baa525c1a65fbedcc3145f3271d49cf828ecd0f77aed5e31e740d
deleted: sha256:08908b45bd8a5b6340e89d9a401e39a04d4c81c66a75b4fc31528c042632bdf9
deleted: sha256:75ed22a7abbe9c23df78263501d5236b7a1dd9649fba94da3aee59ba277fc2c7
deleted: sha256:30f928cfbca4c67e9c284907b304b73a0804fa19b9d8ff22896c6afb79440638
deleted: sha256:b0573c5f42fec17a41f9633532e4f0c1ce77fc111aaec5fa9293bf3975459396
deleted: sha256:a1b7d51ce64b376af6d3e24f10689f04903f7f6174c07f8515127819c4d464f0
deleted: sha256:28115231ced77eebf1e319aacf77c7373f4845f13aa4fd21864cea5b79b5998f
deleted: sha256:954454106831e933798549935ed4bebb0683ccb0807cb4a0ce69537242418d4f
deleted: sha256:043dfc7ae5ae1671626dc1aa082f66791f8579bdcda25c1ccd9d7938c3a352b1
deleted: sha256:32083ac1bbb41043358d3bdf20d2cf6a2b95ddd583fc5f000e723f9ae508cf46
deleted: sha256:f5578f194936295078b78ff2ba8b14807da8b7df240627f3fb85be07bc69f74d
deleted: sha256:1fb565177c22d167b2f0271608e7c2e5a5868e19b36d30fd707604b4f23f0505
deleted: sha256:a1e12e8d24f2e61e9c73c7c29c23b09130fb119cd9672df7f9a03602c0beac84
deleted: sha256:ea493968f3d604b29a929813490d123a8171f2f8a23c67047866b4ee81d4df0c
deleted: sha256:285e528ab55c765304d41679ae7f9b69265bf954762f51b84379212d532ad6bd
deleted: sha256:b11f4e5c2b7fd12935b558f1c6361def6545574703eda262ca1c812c9e60680c
deleted: sha256:af0157c41f52fcf54e4ca265fb5e121b110b66309cebc8ebab09a44eeca21ad0
deleted: sha256:77a594b76fb550d04d4b5a8c2f82bfb7f3cd5b6ac14ac8ab7550de75eb9b86f1
deleted: sha256:1e11339a7869cee0f3b2dd099dd28e1f1f5f987a01639d3e5866efc1f3879cc5
deleted: sha256:dbfcd0b2c04a3ed04f4d99a2b1e65366b43421207230efb9fc30dac37c677fa8

Total reclaimed space: 177.4MB

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

Нужно сделать то же самое, но вместо rm выполнить rmi
а вместо ps выполнить images

Разберём для

Linux

docker rmi $(docker images -q)

Форсированное удаление выполняется с помощью флага —force

docker rmi —force 8d788d646766

Удалить всё

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
docker builder prune
docker rmi $(docker images -q)
docker system prune

Автор статьи: Андрей Олегович

Похожие статьи

Docker
Установка в Linux и Windows
Основы
images: Образы
build: Создание контейнеров + примеры
run: Опции запуска контейнера
Сети
Dockerfile
Остановить/удалить все контейнеры
exec: выполнить команду в контейнере
compose
Видеоуроки
Ошибки
Linux
Windows

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

Кэширование слоев

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

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

Одним из основных факторов, влияющих на то, сколько слоёв в вашем образе необходимо пересобрать, является порядок операций в Dockerfile.

docker system df
docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          138       34        36.18GB   34.15GB (94%)
Containers      74        18        834.8kB   834.6kB (99%)
Local Volumes   118       6         15.31GB   15.14GB (98%)
Build Cache     245       0         1.13GB    1.13GB

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

Периодическая обрезка

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

docker system prune

Несколько более рискованный вариант — это:

docker system prune -a

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

В следующих разделах описаны дополнительные способы удаления определенных элементов.

Удаление Dockerimage

Docker образ — это снимок с диска приложения, такого как веб-сервер, языковая среда выполнения или система управления базами данных. Вы можете просмотреть все изображения, как активные, так и висячие (те, которые не связаны с контейнером), введя:

docker image ls -a

Изображение Docker можно удалить, введя:

docker image rm <name_or_id>

В эту команду можно добавить любое количество изображений — разделяйте их пробелами.

Удаление неиспользуемых Docker образов

Для удаления неиспользуемых образов из системы мы можем использовать команду docker image prune.

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

docker image prune -fDeleted Images:deleted: sha256:6f096c9fa1568f7566d4acaf57d20383851bcc433853df793f404375c8d975d6... Total reclaimed space: 2.751GB

Мы освободили более 2,7 ГБ памяти, удалив лишние изображения. Но, если мы вспомним вывод нашей docker system dfкоманды, у нас есть 34,15 ГБ удаляемых изображений.

Откуда берется остальная часть этого пространства? Это изображения в нашей системе, которые помечены или связаны с контейнером. Мы можем запустить команду docker image prune- a, чтобы принудительно удалить эти изображения, если они не используются.

docker image prune -a -fDeleted Images:untagged: k8s.gcr.io/etcd:3.4.13-0untagged: k8s.gcr.io/etcd@sha256:4ad90a11b55313b182afc186b9876c8e891531b8db4c9bf1541953021618d0e2deleted: sha256:0369cf4303ffdb467dc219990960a9baa8512a54b0ad9283eaf55bd6c0adb934deleted: sha256:f3cecccfe2bea1cbd18db5eae847c3a9c8253663bf30a41288f541dc1470b41e Total reclaimed space: 22.66GB

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

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

Docker контейнер — это запущенный экземпляр образа, и любое количество контейнеров может быть запущено из одного и того же. Контейнеры обычно небольшие, потому что они не имеют состояния и ссылаются на файловую систему образа. Просмотрите все контейнеры, как запущенные, так и остановленные, введя:

docker container ls -a

Вы можете удалить контейнер только после его остановки. Остановите контейнеры, введя:

docker container stop <name_or_id>

Затем контейнеры можно удалить, введя:

docker container rm <name_or_id>

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

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

Мы можем использовать команду docker container prune для очистки дискового пространства, используемого контейнерами. Эта команда удалит из системы все остановленные контейнеры.

Здесь и в последующих примерах мы можем опустить флаг -f для получения запроса на подтверждение перед удалением артефактов.

docker container prune -fDeleted Containers:399d7e3679bf9b14a1c7045cc89c056f2efe31d0a32f186c5e9cb6ebbbf42c8e Total reclaimed space: 834.6kB

Какие контейнеры не используются?

Мы можем увидеть идентификаторы неиспользуемых контейнеров, выполнив команду docker ps с фильтрами по статусу контейнера. Контейнер считается неиспользуемым, если его статус равен exited или dead.

docker ps --filter status=exited --filter status=dead -q11bc2aa92622355901f38ecb263e9bde1f24

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

Если мы хотим удалить все контейнеры из системы, мы можем остановить все запущенные контейнеры, а затем использовать ту же команду prune. Для этого введите вывод команды docker ps -q в docker stop или docker kill команду, если вы хотите принудительно завершить работу контейнера.

docker stop $(docker ps -q)docker container prune

Другой вариант — это docker rm команда, которую можно использовать с docker ps -a -q для удаления всех контейнеров.

docker rm $(docker ps -a -q)

Примечание: Команда docker rm принудительно удаляет запущенный контейнер с помощью SIGKILL сигнала. Это то же самое, что и команда docker kill . Команда docker ps -a -q выводит список всех контейнеров в системе, включая запущенные, и передает его в команду docker rm .

Приведение в порядок сети

Контейнеры могут быть подключены к управляемой Docker сети, чтобы они могли взаимодействовать друг с другом. Это файлы конфигурации, которые не занимают много места на диске. Чтобы просмотреть все сети Docker, введите:

docker network ls

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

docker network rm <name_or_id>

Опять же, в эту команду можно добавить любое количество сетевых имён/идентификаторов, разделённых пробелами.

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

Docker Том — это образ виртуального диска. Его необходимо прикрепить к работающему контейнеру, чтобы он мог сохранять файлы или другую информацию о состоянии между перезапусками. Размеры тома зависят от приложения, использующего его, но типичной базе данных потребуется несколько сотен мегабайт пространства, даже если она в основном пуста.

Просмотрите все дисковые тома, управляемые Docker, введя:

docker volume ls

При удалении тома Docker все его данные будут безвозвратно удалены! Вернуться назад будет невозможно.

Если вы разрабатываете приложение на основе базы данных, обычно целесообразно сохранять один или несколько дампов данных, которые можно использовать для воссоздания определенного набора записей. Большинство клиентских инструментов для работы с базами данных предоставляют возможность дампа или экспорта, например, с помощью ссылки Экспорт в Adminer.

Большинство систем баз данных предоставляют инструмент для резервного копирования, такой как mysqldump утилита в MySQL. Их можно запустить в работающем контейнере с помощью docker exec команды.

Следующая команда Linux/macOS создает резервную копию базы данных MySQL с именем mydb, работающей в контейнере с именем mysql, в файл с именем backup.sql. Используется пользователь MySQL root с паролем mysecret:

docker exec mysql /usr/bin/mysqldump -u root -pmysecret mydb > backup.sql

эквивалентная команда для Windows PowerShell:

docker exec mysql /usr/bin/mysqldump -u root -pmysecret -r mydb | Set-Content backup.sql

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

docker cp mycontainer:/some/file ./host/directory

Предполагая, что ваши данные в безопасности, вы можете удалить любой неиспользуемый том, введя:

docker volume rm <name>

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

docker volume prune

В качестве альтернативы docker volume prune -a я удалю их все. Вы ведь сначала сделали резервную копию, не так ли?..

В Docker тома никогда не очищаются автоматически, потому что они могут содержать ценные данные. Но если мы знаем, что нам больше не нужны данные в томе, мы можем удалить его с помощью docker volume prune команды. Это удаляет все анонимные тома, которые не используются ни в одном контейнере.

docker volume prune -fTotal reclaimed space: 0B

Интересно, что мы видим, что не освободили ни одного места. Это происходит потому, что у нас есть тома, связанные с контейнерами. Мы можем увидеть эти тома, запустив docker volume ls

DRIVER    VOLUME NAMElocal     0a44f085adc881ac9bb9cdcd659c28910b11fdf4c07aa4c38d0cca21c76d4ac4local     0d3ee99b36edfada7834044f2caa063ac8eaf82b0dda8935ae9d8be2bffe404c...

Мы получаем вывод, в котором отображается драйвер и имя тома. Команда docker volume prune удаляет только анонимные тома. Эти тома не имеют имени и не имеют конкретного источника за пределами контейнера. Мы можем использовать docker volume rm -a команду для удаления всех томов.

docker volume prune -a -fDeleted Volumes:c0c240b680d70fffef420b8699eeee3f0a49eec4cc55706036f38135ae121be02ce324adb91e2e6286d655b7cdaaaba4b6b363770d01ec88672e26c3e2704d9e Total reclaimed space: 15.31GB

Полный чистый старт

Все неиспользуемые контейнеры, образы, тома и сети можно удалить с помощью одной команды:

docker system prune -a --volumes

Добавьте -f если вы хотите принудительно выполнить очистку без запроса подтверждения. Ваша система вернется в исходное состояние без каких-либо данных Docker.

Очистка файлов Docker по CRON

Самый простой способ подчищать за Docker это — ежедневно запускать cron-задание для выполнения нашей команды обрезки.

docker system prune -af  --filter "until=$((30*24))h"

команда, заставляющая docker удалить все неиспользуемые контейнеры

Давайте немного разберёмся, чтобы понять, что здесь происходит:

  • Удаление неиспользуемых контейнеров в системе Docker — мы просим Docker удалить неиспользуемые контейнеры.
  • -af — здесь мы объединили два флага. Добавление флага -a заставляет Docker искать не только зависшие контейнеры, но и все контейнеры, которые больше не используются. Флаг -f просто предотвращает появление запроса на подтверждение, который обычно появляется, когда пользователь подтверждает удаление.

Только одно предупреждение: «неиспользуемые» означает «изображения, на которые не ссылается ни один контейнер»: будьте осторожны при использовании -a!

  • —filter — добавление фильтра позволяет указать возраст изображений, которые мы хотим удалить. В данном случае это любые изображения старше 30 дней или 1 месяца. Здесь мы используем базовую математику в bash, так как bash поддерживает только h (часы). Поэтому давайте вычислим 30 * 24 часа, что даст нам 1 месяц в часах, что обычно ограничивает количество контейнеров несколькими гигабайтами. Вы можете сократить это время, если у вас очень мало места на диске вашего VPS.

давайте создадим новый файл в Cron-файле для размещения нашей команды:

cd /etc/cron.daily
sudo nano docker-prune

Команда для создания нового файла в папке /etc/cron.daily/

Как только файл откроется, добавьте созданную нами команду prune и сообщите ОС, что это файл bash

#!/bin/bash
docker system prune -af  --filter "until=$((30*24))h"

содержимое файла docker-prune, который мы только что создали

После добавления команды нажмите Ctrl + O, а затем Ctrl + X, чтобы сохранить и закрыть файл

Теперь, когда мы создали файл, нам нужно сообщить операционной системе, что он должен быть исполняемым, с помощью следующей команды:

sudo chmod +x /etc/cron.daily/docker-prune

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

И это всё. Теперь Docker будет выполнять эту команду ежедневно.

Ссылки:

How to clean your Docker data

How to clear Docker cache and free up space on your system

How to Prune Docker Images Automatically with a Daily Cron job

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Расширения видеофайлов для windows
  • Как сменить разрешение экрана в windows 10 через командную строку
  • Создание образа системы windows 10 что это
  • Как посмотреть удаленные антивирусом файлы windows 10
  • Где хранится кэш фотошопа windows 10