🐳 Как запустить несколько контейнеров Docker на разных IP-адресах |

🐳 Как запустить несколько контейнеров Docker на разных IP-адресах

Мануал

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

В этом случае использование нескольких IP-адресов может стать отличным способом управления несколькими сервисами на одном порту.

Как работают сетевые интерфейсы?

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

Если вы перечислите все устройства в вашей системе с помощью ip addr show, вы найдете различные интерфейсы, такие как eth0 и eno1, которые представляют реальные соединения.

IP-адреса – это отдельная от сетевых интерфейсов история, но, по сути, вы можете иметь несколько IP-адресов, настроенных на один интерфейс, что позволяет вам привязывать сервисы к сетевым сокетам для каждой комбинации IP:PORT.

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

В Docker приложение внутри контейнера может просто привязаться к “порту 80”, который сопоставляется Docker с определенным IP-адресом на хосте.

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

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

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

Запуск нескольких служб Docker на одном сервере

Запустить контейнер на определенном адресе довольно просто, в зависимости от того, как вы его запускаете.

По сути, большинство контейнеров Docker имеют свои порты, настроенные в формате host:container.

Например, 5000:80 забирает порт 80 контейнера и делает его доступным с порта 5000 хоста.

Однако на самом деле вы можете связывать сокеты напрямую, то есть вместо 5000 вы можете подставить пару IP:PORT, используя три двоеточия для всей привязки:

docker run -it -d ipaddress:hostport:containerport --name web nginx

Например, вы можете иметь два контейнера NGINX на разных IP-адресах, например, так (запомните, что Docker требует отдельных имен для контейнеров):

docker run -it -d 123.0.0.1:80:80 --name web nginx
docker run -it -d 123.0.0.2:80:80 --name web2 nginx

Если вы используете Docker Compose, конфигурация будет аналогичной.

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

version: "3"
services:
  nginx:
    image: nginx
    restart: always  
    ports: 
      - "123.0.0.1:80:80"

В любом случае, вы можете создать несколько сервисов, привязанных к порту хоста 80, при условии, что сервисы не прослушивают одни и те же IP-адреса.

см. также:

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий