null

Docker network

Давайте рассмотрим простое сетевое взаимодействие в Docker. Для этого нам понадобится команда docker
network, которая позволяет манипулировать внутренними сетями докера.

Команда

docker network create [options] NETWORK

позволяет нам создать свою собственную сеть докера. По умолчанию докер создаёт одну сеть, которая соотносится с интефейсом docker0, все контейнеры, запускаемые через docker run, автоматически добавляются в эту сеть. Данную сеть нельзя удалить или изменить.

Наиболее используемыми опциями для данной команды являются:

--subnet - позволяет задать необходимую нам подсеть.

--ip-range - позволяет задать диапазон динамических адресов, выдаваемых контейнерам при подключении

Таким образом, создание сети с маской 172.10.0.0/16 и диапазоном динамических адресов 172.10.240.0/20 выглядит так:

docker network create --subnet 172.10.0.0/16 --ip-range 172.10.240.0/20 my-net

Для добавления контейнера в сеть нам потребуется команда docker network connect

docker network connect --alias host1 --ip 172.10.241.2 my-net container1

Данная команда добавит контейнер с именем container1 в сеть my-net и присвоит ему адрес 172.10.241.2. Контейнер в сеть необходимо добавлять только один раз, после чего его можно останавливать и запускать заново, подключение к сети будет происходить автоматически с присовением адреса, указаного в --ip. В случае, если этот адрес уже занят, запуск контейнера провалится. Поэтому следует выделять адреса за пределами диапазона, указаного в --ip-range. Опция --alias позволяет задать имя контейнера, по которому можно будет обращаться к нему из сети. Кроме того, контейнер можно добавить в сеть добавив опции --network, --network-alias, --ip в команду docker run.

Добавим еще один контейнер в сеть, присвоив ему алис host3 и адрес 172.10.241.2 и проверим работоспособность.

Как видим, контейнер успешно добавился в сеть. Проверим доступность второго контейнера.

Всё пингуется, отлично.

Еще несколько полезных команд:

docker network disconnect [OPTIONS] NETWORK CONTAINER - отключает контейнер от сети

docker network ls - выводит список всех сетей.

docker network prune - удаляет все сети, к которым не подеключен ни один контейнер.

docker network inspect NETWORK - выводит подробную информацию о сети, включая активные контейнеры в сети.

На это закончим наш краткий обзор сетей в докере.