ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

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

Установить Docker 1.11 на Ubuntu 16.04 LTS x64

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.

Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий ниже.

Exit mobile version