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

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

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

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

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

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

docker system prune

Вам будет предложено подтвердить операцию:

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]

Используйте параметр -f ( --force ), чтобы обойти приглашение.

Если вы хотите удалить все неиспользуемые изображения, а не только болтающиеся, добавьте к команде параметр -a ( --all ):

docker system prune -a
WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all images without at least one container associated to them
        - 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

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

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

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

Чтобы удалить один или несколько контейнеров Docker, используйте команду docker container rm , за которой следуют идентификаторы контейнеров, которые вы хотите удалить.

Вы можете получить список всех контейнеров , вызвав команду docker container ls с параметром -a :

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 prune :

docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

Если вы хотите получить список всех неработающих (остановленных) контейнеров, которые будут удалены с помощью docker container prune , используйте следующую команду:

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

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

Команда docker container prune позволяет удалять контейнеры в зависимости от определенного условия с помощью параметра --filter .

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

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

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

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

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

docker container stop $(docker container ls -aq)

Команда docker container ls -aq генерирует список всех контейнеров.

После остановки всех контейнеров удалите их с помощью команды docker container rm , а затем списка идентификаторов контейнеров.

docker container rm $(docker container ls -aq)

Удаление образов Docker

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

Удаление одного или нескольких изображений

Чтобы удалить один или несколько образов Docker, сначала вам нужно найти идентификаторы образов:

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
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Будьте осторожны при выполнении этой команды. Если вы построили изображение без тега, оно будет удалено.

Удаление всех неиспользуемых изображений

Чтобы удалить все изображения, на которые не ссылается какой-либо существующий контейнер, а не только висячие, используйте команду prune с параметром -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 . Вы можете использовать более одного фильтра.

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

docker image prune -a --filter "until=12h"

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

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

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

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
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N]

Используйте параметр -f или --force чтобы обойти приглашение.

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

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

Чтобы удалить одну или несколько сетей 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

Вам будет предложено продолжить:

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.

Вам также следует ознакомиться с официальной документацией Docker .

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

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