Как использовать команду docker network prune для удаления неиспользуемых сетей

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии (LabEx) вы научитесь эффективно управлять сетями Docker с помощью команды docker network prune. Сначала мы создадим несколько пользовательских сетей, чтобы смоделировать реальную ситуацию с множеством сетей.

После создания этих сетей вы узнаете, как перечислить и определить, какие сети в настоящее время не используются. Наконец, вы потренируетесь использовать команду docker network prune для удаления этих неиспользуемых сетей, в том числе как применять фильтры для более целенаправленного удаления. Этот практический опыт позволит вам приобрести навыки по поддержанию чистоты и оптимизации вашей среды Docker.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/ls -.-> lab-555178{{"Как использовать команду docker network prune для удаления неиспользуемых сетей"}} docker/ps -.-> lab-555178{{"Как использовать команду docker network prune для удаления неиспользуемых сетей"}} docker/rm -.-> lab-555178{{"Как использовать команду docker network prune для удаления неиспользуемых сетей"}} docker/prune -.-> lab-555178{{"Как использовать команду docker network prune для удаления неиспользуемых сетей"}} docker/network -.-> lab-555178{{"Как использовать команду docker network prune для удаления неиспользуемых сетей"}} end

Создание пользовательских сетей

На этом этапе мы научимся создавать пользовательские сети в Docker. По умолчанию Docker предоставляет три сети: bridge, host и none. Однако вы можете создать свои собственные пользовательские сети, чтобы изолировать контейнеры и контролировать их взаимодействие.

Для создания пользовательской сети используется команда docker network create. Создадим сеть типа bridge с именем my-network-1.

docker network create my-network-1

Вы должны увидеть вывод, похожий на следующий, что означает успешное создание сети:

<network_id>

Теперь создадим еще одну сеть типа bridge с именем my-network-2.

docker network create my-network-2

Снова вы должны увидеть идентификатор сети в выводе.

Мы можем убедиться, что сети были созданы, перечислив все доступные сети с помощью команды docker network ls.

docker network ls

В выводе будет список сетей, включая сети по умолчанию и две пользовательские сети, которые мы только что создали (my-network-1 и my-network-2).

Перечисление сетей для определения неиспользуемых

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

Мы уже использовали команду docker network ls на предыдущем этапе, чтобы перечислить все сети. Запустим ее еще раз, чтобы увидеть текущее состояние.

docker network ls

В выводе показаны идентификатор сети, имя, драйвер и область действия для каждой сети. Обратите внимание, что сети my-network-1 и my-network-2, которые мы создали, перечислены.

Для определения неиспользуемых сетей мы можем использовать команду docker network prune с флагом --dry-run. Этот флаг позволяет нам увидеть, какие сети будут удалены, не удаляя их на самом деле.

docker network prune --dry-run

Вывод этой команды будет перечислять сети, которые не присоединены к каким-либо запущенным контейнерам и будут удалены. Поскольку мы не присоединили никакие контейнеры к my-network-1 или my-network-2, они должны появиться в выводе предварительного просмотра.

Запустим простой контейнер, присоединенный к my-network-1, чтобы увидеть, как это повлияет на вывод команды docker network prune --dry-run. Мы будем использовать образ hello-world, который очень маленький. Сначала скачаем образ:

docker pull hello-world

Теперь запустим контейнер с использованием этого образа и присоединим его к my-network-1. Флаг -d запускает контейнер в отсоединенном режиме (в фоновом режиме).

docker run -d --network my-network-1 hello-world

Вы увидите идентификатор контейнера в выводе.

Теперь запустим команду docker network prune --dry-run еще раз.

docker network prune --dry-run

На этот раз my-network-1 не должен появиться в списке сетей для удаления, так как он используется запущенным контейнером hello-world. my-network-2, который не используется, все еще должен быть перечислен.

Для остановки и удаления контейнера hello-world сначала найдем его идентификатор с помощью команды docker ps.

docker ps

Затем остановим контейнер с помощью команды docker stop <container_id> и удалим его с помощью команды docker rm <container_id>. Замените <container_id> на фактический идентификатор из вывода команды docker ps.

docker stop <container_id>
docker rm <container_id>

Теперь, если вы снова запустите команду docker network prune --dry-run, обе сети my-network-1 и my-network-2 должны быть перечислены как сети для удаления, так как они больше не используются.

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

На этом этапе мы научимся удалять все неиспользуемые сети с помощью команды docker network prune. Эта команда полезна для очистки вашей среды Docker и освобождения ресурсов путем удаления сетей, которые в настоящее время не присоединены к каким-либо контейнерам.

Перед удалением неиспользуемых сетей перечислим их еще раз, чтобы увидеть, какие из них в настоящее время существуют.

docker network ls

Вы должны увидеть сети по умолчанию (bridge, host, none) и пользовательские сети, которые мы создали на первом этапе (my-network-1 и my-network-2). Поскольку мы остановили и удалили контейнер hello-world на предыдущем этапе, обе сети my-network-1 и my-network-2 должны быть теперь неиспользуемыми.

Для удаления всех неиспользуемых сетей просто запустите команду docker network prune без каких-либо флагов. Docker попросит вас подтвердить действие.

docker network prune

Вы увидите сообщение, запрашивающее подтверждение, похожее на следующее:

WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N]

Введите y и нажмите Enter, чтобы продолжить удаление.

В выводе будут перечислены сети, которые были удалены, и общее количество освобожденного пространства.

Теперь перечислим сети еще раз, чтобы убедиться, что my-network-1 и my-network-2 были удалены.

docker network ls

Теперь в списке должны быть только сети по умолчанию (bridge, host, none).

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

На этом этапе мы научимся удалять неиспользуемые сети с использованием фильтров. Фильтры позволяют вам выборочно удалять сети на основе определенных критериев, таких как метки (labels) или время создания.

Сначала создадим несколько новых сетей с метками, чтобы продемонстрировать работу фильтрации. Мы создадим сеть network-a с меткой env=dev и сеть network-b с меткой env=test.

docker network create --label env=dev network-a
docker network create --label env=test network-b

В выводе обеих команд должны отобразиться идентификаторы сетей.

Теперь перечислим сети, чтобы увидеть только что созданные с их метками.

docker network ls

В списке должны быть видны network-a и network-b.

Для удаления сетей на основе фильтра мы используем флаг --filter с командой docker network prune. Например, чтобы удалить все неиспользуемые сети с меткой env=dev, мы можем использовать фильтр label=env=dev.

Сначала выполним предварительный просмотр, чтобы увидеть, какие сети будут удалены с использованием этого фильтра.

docker network prune --filter label=env=dev --dry-run

В выводе должна быть указана сеть network-a как сеть, которая будет удалена, так как она имеет метку env=dev и в настоящее время не используется.

Теперь давайте действительно удалим неиспользуемые сети с меткой env=dev.

docker network prune --filter label=env=dev

Вам будет предложено подтвердить действие. Введите y и нажмите Enter.

В выводе будет показано, что сеть network-a была удалена.

Перечислим сети еще раз, чтобы убедиться, что сеть network-a удалена, а сеть network-b (с меткой env=test) по-прежнему присутствует.

docker network ls

В списке должна быть видна сеть network-b, но не сеть network-a.

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

Резюме

В этом практическом занятии (лабораторной работе) мы научились управлять сетями Docker, сконцентрировавшись в частности на определении и удалении неиспользуемых сетей. Мы начали с создания пользовательских мостовых сетей (custom bridge networks) с помощью команды docker network create, показав, как добавить новые сети помимо сетей по умолчанию. Затем мы использовали команду docker network ls для перечисления всех доступных сетей и проверки создания наших пользовательских сетей.

Затем мы изучили, как определить неиспользуемые сети. Мы узнали, что команда docker network prune, особенно с флагом --dry-run, является ценным инструментом для предварительного просмотра того, какие сети не присоединены ни к каким контейнерам и, следовательно, могут быть удалены. Этот этап является важным для понимания последствий удаления сетей перед их фактическим удалением.