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]
Если вы также хотите удалить все неиспользуемые тома, передайте флаг --volumes
:
docker system prune --volumes
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all volumes not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
Контейнеры-докеры не удаляются автоматически при их остановке, если вы не запускаете контейнер с использованием флага --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
Как только вы узнаете о контейнерах CONTAINER ID
, которые хотите удалить, перейдите к команде 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
Вам будет предложено продолжить, используйте флаг -f
или --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 images ls
, чтобы найти идентификатор изображений, которые вы хотите удалить.
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
После того как вы расположены изображения , которые вы хотите удалить, передать их IMAGE ID
в команду 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
для обхода запроса.
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Чтобы удалить все изображения, на которые не ссылается какой-либо существующий контейнер, а не только свисающие, используйте флаг -a
:
docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
С помощью команды
docker image prune
вы можете удалить изображения на основе условия, используя флаг фильтрации --filter
. На момент написания этой статьи в настоящее время поддерживаются фильтры являются until
и label
. Вы можете использовать несколько фильтров, передавая несколько флагов --filter
.
Например, чтобы удалить все изображения, созданные более 12 часов назад, выполните:
docker image prune -a --filter "until=12h"
Чтобы удалить один или несколько тонов Докера, используйте команду docker volume ls
, чтобы найти идентификатор томов, которые вы хотите удалить.
docker volume ls
Результат должен выглядеть примерно так:
DRIVER VOLUME NAME
local 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163
local terano
Когда вы найдете тома VOLUME NAME
, которые хотите удалить, передайте их команде docker volume rm
. Например, чтобы удалить первый том, указанный в выведенном выше выпуске:
docker volume rm 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163
Если вы получили ошибку, аналогичную следующей, это означает, что этот том используется существующим контейнером. Чтобы удалить том, вам нужно сначала удалить контейнер.
Error response from daemon: remove 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163: volume is in use - [c7188935a38a6c3f9f11297f8c98ce9996ef5ddad6e6187be62bad3001a66c8e]
Чтобы удалить все неиспользуемые тома, используйте команду docker image prune
:
docker volume prune
Вам будет предложено продолжить, используйте флаг -f
или --force
для обхода запроса.
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N]
Чтобы удалить одну или несколько сетей Docker, используйте команду docker network ls
, чтобы найти идентификатор сетей, которые вы хотите удалить.
docker network ls
Результат должен выглядеть примерно так:
NETWORK ID NAME DRIVER SCOPE
107b8ac977e3 bridge bridge local
ab998267377d host host local
c520032c3d31 my-bridge-network bridge local
9bc81b63f740 none null local
После того как вы расположены сети , которые вы хотите удалить, передать их NETWORK ID
в команду docker network rm
. Например, чтобы удалить сеть с именем my-bridge-network
выполните:
docker network rm c520032c3d31
Если вы получите ошибку, аналогичную следующей, это означает, что сеть используется существующим контейнером. Чтобы удалить сеть, сначала необходимо удалить контейнер.
Error response from daemon: network my-bridge-network id 6f5293268bb91ad2498b38b0bca970083af87237784017be24ea208d2233c5aa has active endpoints
Используйте команду docker network prune
для удаления всех неиспользуемых сетей.
docker network prune
Вам будет предложено продолжить, используйте флаг -f
или --force
для обхода запроса.
WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N]
С помощью команды docker network prune
вы можете удалить сети на основе условия, используя флаг фильтрации --filter
. На момент написания этой статьи в настоящее время поддерживаются фильтры являются until
и label
. Вы можете использовать несколько фильтров, передавая несколько флагов --filter
.
Например, чтобы удалить все сети, созданные более 12 часов назад, запустите:
docker network prune -a --filter "until=12h"
В этом руководстве мы показали вам некоторые из общих команд для удаления контейнеров, изображений, томов и сетей Docker.
Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий ниже.
Здравствуйте! Отличная и очень полезная статья. Интерфейс также вызывает уважение. Каким обрзаом при соврачивании, разворачивании окна у Вас так прикольно расплывается текст? Какую технологию использовали?
Благодарю за отзыв. Я сейчас не вспомню, что делал, позже отпишусь