Программы
Как удалить все Docker образы и контейнеры

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

Не всегда нужно удалять всё, но объяснение данного "рецепта" объяснит как в целом удалять образы и контейнеры.

Не все 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)

Но давайте не будем на этом останавливаться и рассмотрим подробнее, что здесь происходит!

Изображение Шпаргалка по командам Linux, FreeBSD и MacOS

Получить список имён всех имеющихся 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)

Вот такой вот аналог смерти кащеевой! А что вы хотели? – Контейнеры...