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

  • Михаил
  • 12 мин. на прочтение
  • 118
  • 20 Jun 2022
  • 20 Jun 2022

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"