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

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

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

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

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

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

Команда docker system prune удалит остановленные контейнеры, все висячие образы и все неиспользуемые сети:

docker system prune

Вы можете использовать флаг -f или —force, чтобы пропустить дополнительный запрос на подтверждение операции.

Вывод:
WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all build cache
Are you sure you want to continue? [y/N]

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

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

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

Чтобы удалить один или несколько образов Docker используйте команду docker container rm, после которой следует указать идентификатор контейнера, который необходимо удалить. Список всех активных и неактивных контейнеров можно получить, передав флаг -a команде docker container ls:

docker container ls -a

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

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                      PORTS               NAMES
cc3f2ff51cab        centos                  "/bin/bash"              2 months ago        Created                                         competent_nightingale
cd20b396a061        solita/ubuntu-systemd   "/bin/bash -c 'exec …"   2 months ago        Exited (137) 2 months ago                       systemd
fb62432cf3c1        ubuntu                  "/bin/bash"              3 months ago        Exited (130) 3 months ago                       jolly_mirzakhani

Как только вы нашли необходимый идентификатор контейнера, который хотите удалить, передайте его имя команде docker container rm. Например, чтобы удалить первые два контейнера, перечисленных выше выполните команду:

docker container rm cc3f2ff51cab cd20b396a061

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

Error response from daemon: You cannot remove a running container fc983ebf4771d42a8bd0029df061cb74dc12cb174530b2036987575b83442b47. Stop the container before attempting removal or force remove.

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

Перед выполнением команды можно получить список всех неиспользуемых (остановленных) контейнеров, с помощью следующей команды:

docker container ls -a --filter status=exited --filter status=created

Чтобы удалить все остановленные контейнеры, используйте команду docker container prune:

docker container prune

Вам будет предложено продолжить, используйте флаг-for —force, чтобы пропустить этот вопрос.

Вывод:
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

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

Команда docker container prune позволяет удалить контейнеры в зависимости от их состояния, используя флаг фильтрации —filter. На момент написания этой статьи дополнительно поддерживаются фильтры until и label. Вы можете использовать более одного фильтра, передавая несколько флагов —filter.

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

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

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

Вы можете получить список всех контейнеров Docker в вашей системе с помощью команды docker container ls -aq. Чтобы остановить все запущенные контейнеры, используйте команду docker container stop, после которой укажите список всех идентификаторов.

docker container stop $(docker container ls -aq)

После остановки всех контейнеров их можно удалить. Используя команду docker container stop, за которой следует список идентификаторов контейнеров попробуем сделать это:

docker container rm $(docker container ls -aq)

Как удалить образы Docker

Для удаления одного или нескольких образов Docker используйте команду docker images ls, чтобы найти идентификатор(ID) образа, который нужно удалить.

docker image ls

Вывод должен выглядеть примерно так:

REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
centos                  latest              75835a67d134        7 days ago          200MB
ubuntu                  latest              2a4cca5ac898        2 months ago        111MB
linuxize/fedora         latest              a45d6dca3361        3 months ago        311MB
java                    8-jre               e44d62cf8862        3 months ago        311MB

Как только вы найдете образы, которые хотите удалить, передайте их идентификаторы команде docker image rm. Например, чтобы удалить первые два образа, перечисленные в выходных данных выше выполните:

docker image rm 75835a67d134 2a4cca5ac898

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

Error response from daemon: conflict: unable to remove repository reference «centos» (must force) — container cd20b396a061 is using its referenced image 75835a67d134

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

Docker имеет команду docker image prune, которая может использоваться для удаления висячих и неиспользуемых образов. Висячий образ — это такой образ, который не отмечен и не используется ни одним контейнером. Для удаления висячих изображений введите:

docker image prune

Вам будет предложено продолжить, используйте флаг -f или —force, чтобы пропустить этот вопрос.

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

docker image prune -a

Удаляем образы используя фильтры

С помощью команды docker image prune можно удалить образы используя определенные условия с помощью флага фильтрации —filter.

На момент написания этой статьи в настоящее время поддерживаются фильтры until и label. Вы можете использовать более одного фильтра, передавая несколько флагов —filter.

Например, чтобы удалить все изображения, созданные более 6 минут назад, запустите:

docker image prune -a --filter "until=6m"

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

Удалить один или несколько томов

Для начала, используйте команду docker volume ls для поиска идентификатора томов. Это необходимо чтобы удалить один или несколько томов Docker.

docker volume ls

Результат выполнения команды должен выглядеть примерно так:

DRIVER              VOLUME NAME
local               4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163
local               terano

Теперь выберите имя или несколько имен томов, которые вы хотите удалить и передайте их в команду docker volume rm. Например, чтобы удалить первый том, указанный в выводе выше выполните:

docker volume rm 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163

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

Error response from daemon: remove 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163: volume is in use — [c7188935a38a6c3f9f11297f8c98ce9996ef5ddad6e6187be62bad3001a66c8e]

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

Для удаления всех неиспользуемых томов существует команда docker volume prune:

docker volume prune

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

Одна или несколько сетей

Перед удалением одной или нескольких сетей Docker используйте команду docker network ls, чтобы найти идентификатор сетей, которые хотите удалить.

docker network ls

Результат должен быть примерно таким:

NETWORK ID          NAME                DRIVER              SCOPE
107b8ac977e3        bridge              bridge              local
ab998267377d        host                host                local
c520032c3d31        my-abuzov-network   bridge              local
9bc81b63f740        none                null                local

После обнаружения названия сетей, передайте их идентификатор сети команде docker network rm. Например, чтобы удалить сеть с именем my-abuzov-network выполните:

docker network rm c520032c3d31

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

Error response from daemon: network my-abuzov-network id 6f5293268bb91ad2498b38b0bca970083af87237784017be24ea208d2233c5aa has active endpoints

Удалить неиспользуемую сеть

Используйте команду docker network prune для удаления всех неиспользуемых сетей.

docker network prune

Эту команду можно выполнить принудительно, используя специальный флаг -f или —force.

Удалить сети с помощью фильтров

С помощью команды docker network prune можно удалить сети по условиям, используя флаг фильтрации —filter.

На момент написания этой статьи в настоящее время поддерживаются фильтры until и label. Вы можете использовать более одного фильтра, передавая несколько флагов —filter.

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

docker network prune -a --filter "until=5h"

В этом руководстве мы показали вам некоторые общие команды для удаления контейнеров Docker, образов, томов и сетей.

Рекомендуем дополнительно проверить официальную документацию Docker. Если у вас возникли вопросы, пожалуйста, оставьте комментарий ниже.

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