Не все Docker-образы одинаково полезны. Они занимают место на диске, найти их на файловой системе не так то просто. К тому же, Docker имеет свои команды для управления образами – так что лучше не лезть самому на файловую систему, а довериться ему – вдруг у него сохранится кеш, или какая-то иная мета-информация, которая будет только путать и его, и вас.
Если кратко, то ответом на поставленный вопрос может служить данный скрипт:
#!/bin/bash
# Stop all containers
docker stop $(docker ps -a -q)
# Delete all containers
docker rm $(docker ps -a -q)
# Delete all images
docker rmi $(docker images -q)
Но давайте не будем на этом останавливаться и рассмотрим подробнее, что здесь происходит!
Получить список имён всех имеющихся Docker-контейнеров
Для начала, команда docker ps
, которая используется в каждой инструкции –
выводит список всех контейнеров. Однако, эта команда по умолчанию выводит
только запущенные контейнеры. Чтобы вывести все, используем ключ -a
.
Сам же список выводится довольно подробно, в виде таблицы, которую удобно
смотреть человеку. Но нам то нужно не удобство, а просто список имён контейнеров.
Как раз для этого мы используем ключ -q
– от "quiet" (тихо).
Таким образом, чтобы получить просто список имён всех имеющихся в системе Docker-контейнеров, используется команда:
docker ps -a -q
Непосредственно удаление контейнеров и образов
Сначала нужно остановить запущенные контейнеры – Docker не позволяет удалить контейнер, пока он запущен:
docker stop $(docker ps -a -q)
– и пусть вас не смущает, что мы просим остановить уже остановленные контейнеры: вот к этому Docker безразличен. Ты попросил меня остановить то, что и так остановлено? Замечательно! – Значит ничего не надо делать!
Теперь мы можем удалить все контейнеры командой docker rm
:
docker rm $(docker ps -a -q)
И всё для того, чтобы иметь возможность удалить непосредственно образ. Как вы могли догадаться, удалить образ без удаления всех контейнеров, которые его используют, нельзя.
docker rmi $(docker images -q)
Вот такой вот аналог смерти кащеевой! А что вы хотели? – Контейнеры...