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. Если у вас возникли вопросы, пожалуйста, оставьте комментарий ниже.