Базовые сетевые средства Docker на одном хосте

Узнайте, как использовать базовые и расширенные сетевые инструменты для управления контейнерами Docker. Функция создания сетей позволяет пользователям определять собственные сети и подключать к ним контейнеры.

Вы можете создать сеть на одном хосте или сеть, охватывающую несколько хостов, используя функцию сети Docker. В этой статье мы рассмотрим сетевое взаимодействие контейнеров Docker на одном хосте. Информацию и инструкции по объединению контейнеров Docker в сеть на нескольких хостах можно найти в нашей статье на эту тему.

Безопасная работа с Docker без использования Sudo

Демон Docker запускается от имени root, что означает, что пользователям придется использовать sudo для выполнения команд Docker.

Чтобы избежать необходимости использовать sudo для каждой команды Docker, просто добавьте своего пользователя (пользователей) в группу docker с помощью команды:

usermod -aG docker [username]

Например, добавив пользователя jdoe в группу Docker, этому пользователю больше не придется использовать sudo для каждой команды Docker. Чтобы добавить пользователя в группу, используйте команду:

usermod -aG docker jdoe

Сети Docker по умолчанию

Каждая установка Docker автоматически создает три сети по умолчанию. Вы можете перечислить эти сети с помощью команды:

sudo docker network ls

Вывод этой команды будет выглядеть следующим образом:

Сеть bridge — это сеть по умолчанию. Если не указано иное, bridge — это сеть, в которой Docker будет запускать любой новый контейнер.

Сетевое взаимодействие Docker: Bridge vs Overlay

Docker изначально поддерживает два типа сетей: bridge и overlay.

  • Мостовая сеть ограничена одним хостом (сервером).
  • Оверлейная сеть может охватывать несколько хостов (серверов).

Поскольку оверлейные сети более сложны, мы рассмотрим их в другой статье.

Инспектирование сети

При осмотре сети Docker будет получена информация об этой сети, включая информацию о том, какие контейнеры подключены к сети, и их IP-адреса. Это ценный инструмент тестирования, а также простой способ найти IP-адрес вашего контейнера.

Вы можете проверить сеть с помощью этой команды:

sudo docker network inspect [network name]

Например, чтобы проверить сеть bridge, нужно выполнить следующую команду:

sudo docker network inspect bridge

Вывод этой команды будет выглядеть примерно так:

Как вы можете видеть на скриншоте выше, в этой bridge-сети запущен только один контейнер. Имя контейнера — test_centos_container, а назначенный ему IP-адрес — 172.17.0.3.

Примечание

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

Создание новой мостовой сети

Чтобы создать собственную сеть, выполните следующую команду:

sudo docker network create -d [driver] [new network name]

Флаг -d позволяет указать драйвер для сети. Для мостовой сети используйте драйвер моста.

Например, чтобы создать мостовую сеть с именем new_test_network, выполните команду:

sudo docker network create -d bridge new_test_network

Вы можете использовать команду sudo docker network ls, чтобы просмотреть список сетей на вашем хосте и убедиться, что ваша сеть была создана.

Запуск контейнера и добавление его в сеть

Если вы не укажете сеть при запуске контейнера, он будет автоматически добавлен в сеть bridge по умолчанию.

Чтобы запустить контейнер и добавить его в определенную сеть, используйте команду :

sudo docker run -it --net=[network name] --name [container name] [image]

Например, чтобы запустить контейнер с именем test_python_container из образа python и добавить его в сеть с именем new_test_network, выполните следующую команду:

sudo docker run -it --net=new_test_network --name test_centos_container centos

Для отсоединения от контейнера используйте CTRL-pCTRL-q.

Вы можете использовать sudo docker network inspect [имя сети], чтобы проверить сеть и убедиться, что контейнер присоединен.

Добавление запущенного контейнера в сеть

Вы можете добавить запущенный контейнер в сеть с помощью команды :

sudo docker network connect [network name] [container name]

Например, чтобы добавить запущенный контейнер с именем test_centos_container в сеть с именем another_test_network, нужно выполнить следующую команду:

sudo docker network connect another_test_network test_centos_container

Вы можете использовать команду sudo docker network inspect [имя сети], чтобы проверить сеть и убедиться, что контейнер подключен.

Примечание

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

Отключение контейнера от сети

Чтобы отключить контейнер от сети, используйте команду :

sudo docker network disconnect [network name] [container ID or name]

Например, чтобы отключить контейнер с именем test_centos_container от сети new_test_network, нужно выполнить следующую команду:

sudo docker network disconnect new_test_network test_centos_container

Вы можете использовать команду sudo docker network inspect [имя сети], чтобы проверить сеть и убедиться, что контейнер был отключен.

Примечание

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

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

Примечание

Вы не можете удалить сети по умолчанию, которые Docker создает при запуске.

После того как все контейнеры, добавленные в сеть, будут остановлены или отключены, вы можете удалить сеть с помощью команды :

sudo docker network rm [network ID or name]

Например, для удаления сети new_test_network команда будет следующей:

sudo docker network rm new_test_network

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

Пример: Пинг между двумя контейнерами в одной сети

В этом примере мы создадим пользовательскую сеть bridge, запустим два контейнера в этой сети, прикрепим к контейнеру ping_sender и будем пинговать оттуда другой контейнер ping_receiver.

Примечание

В этом примере будет использоваться официальный образ CentOS 7 под названием centos, который вы можете загрузить с сайта Docker с помощью команды :

sudo docker pull centos

Если вы предпочитаете использовать Ubuntu, просто подставьте вместо него образ Ubuntu.

Сначала создайте мостовую сеть с именем ping_test_network с помощью команды:

sudo docker network create -d bridge ping_test_network

Затем запустите контейнер с именем ping_receiver и присоедините его к мостовой сети ping_test_network с помощью команды:

sudo docker run -it --net=ping_test_network  --name ping_receiver centos /bin/bash

Используйте CTRL-p CTRL-q для отсоединения от контейнера ping_receiver.

Осмотрите сеть ping_test_network, чтобы получить IP-адрес контейнера ping_receiver с помощью команды:

sudo docker network inspect ping_test_network

Запишите IP-адрес контейнера.

В данном случае IP-адрес 172.19.0.2.

Запустите контейнер с именем ping_sender и присоедините его к мосту ping_test_network командой:

sudo docker run -it --net=ping_test_network  --name ping_sender centos bin/bash

После присоединения к контейнеру и получения командной строки выполните команду ping для другого контейнера:

ping [IP address of ping_receiver]

В данном случае мы будем пинговать IP-адрес 172.19.0.2. Результаты успешного пинга будут выглядеть примерно так:

Завершите ping с помощью CTRL-c, затем используйте CTRL-pCTRL-q для выхода из контейнера.

  • Конфигурация

    Оцените статью
    cdelat.ru
    Добавить комментарий