Перейти к содержанию

Сети

Сеть для контейнеров

Контейнеры Linux в основном состоят из процессов, выполняемых прямо в хост-системе, но на сетевом уровне они ведут себя совсем не так, как другие процессы.

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

Как это работает

Представим, что каждый контейнер Linux ведет себя как хост в частной сети. Сервер Docker в этом случае выступает как виртуальный мост, в контейнеры - клиенты, которые находятся за ним. Мост - это просто сетевое устройство, передающее трафик с одной стороны на другую.

Фактически у каждого контейнера есть виртуальный интерфейс Ethernet, подключенный к мосту Docker, и IP-адрес, назначенный виртуальному интерфейсу (см схему ниже)

Сеть в Docker
Сеть на типичном сервере Docker

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

Docker выделяет частные подсети из неиспользуемого блока частных подсетей (RFC 1918). Он определяет, какие блоки не используются на хосте, и назначает один из них виртуалной сети. Она соединяется мостом с локальной сетью хоста через интерфейс на сервере, который называется docker0. Это означает, что по умолчанию все контейнеры находятся в сети и могут взаимодействовать друг с другом напрямую, но для обращения к хосту или внешнему миру им требуется интерфейс виртуального моста docker0.

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

Примечание

Можно настроить сеть отдельно для каждого контейнера или полностью отключить виртуальную сеть для контейнера, указав параметр --net=host для команды docker container run. В этом режиме контейнеры используют сетевые устройства и адрес хоста, обходясь без виртуальных интерфейсов или мостов.

Warning

При работе с сетью в Docker необходимо помнить о безопасности.