CloudLite
8 (495) 784-61-39 techsupport@cloudlite.ru
Техническая поддержка
8 (495) 784-61-37 sales@cloudlite.ru
Тарифы, оплата, счета
Array
(
    [ELEMENT_CODE] => docker-network
)
Виртуальный сервер Windows/Linux

БАЗА ЗНАНИЙ

Создание контейнеров Docker для общения друг с другом по hostname с помощью контейнерной сети

Если вы хотите подключить различные контейнеры docker — например node.js сервер и слой кэширования redis — возможно, вы заметили, что функционал dockers — link flag устарел и теперь считается устаревшим. Одним из решений было бы использовать Docker Compose для совместной независимости между контейнерами, но я предполагаю, что вы используете обычный старый Docker.


Предпочтительный способ решения проблем называется Docker container networking. Сейчас я покажу вам, как настроить вашу контейнерную сеть docker и позволить контейнерам взаимодействовать друг с другом по имени хоста, а не по IP-адресу.


Во-первых, предположим, что у вас есть контейнер nodejs, который принимает url redis в качестве переменной среды. Вы бы развернули свой контейнер следующим образом:

$ docker --name myNodejs run -d -p 3001:3001 -e REDIS_URL= nodejs

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

$ docker run --name myRedis -d -p 6379:6379 redis

Теперь у вас работают два контейнера, но они не знают друг о друге. Именно здесь в игру вступает контейнерная сеть Docker. Давайте создадим сеть с именем myNetwork

$ docker network create myNetwork $ docker network list

Вы увидите список текущих сетей, и myNetwork будет одной из них. Теперь давайте пересоздадим наш контейнер redis с правильным флагом.


$ docker run --name redis.networked -d -p 6379:6379 --network myNetwork redis

Мы можем проверить, подключён ли контейнер к нашей сети, выполнив следующую команду


$ docker network inspect myNetwork

Вы увидите, что redis.networked работает в вашей сети. Превосходно! IP-адрес также отображается, но то, что позволяет вам делать контейнерная сеть, — это ссылаться на другие контейнеры, используя их имя.


$ docker run --name node.networked -d -p 3001:3001 -e REDIS_URL=redis://redis.networked:6379 --network myNetwork nodejs

И вот! Теперь ваш контейнер redis доступен во всех контейнерах, использующих флаг сети, указывающий на myNetwork в разделе redis.networked. Надеюсь,, что это было полезно для тех, кто пытается перейти от связанных контейнеров к контейнерной сети.

Не нашли ответа на Ваш вопрос? Напишите нам!

techsupport@cloudlite.ru - служба техподдержки

sales@cloudlite.ru - вопросы по услугам, оплате, документам и партнерству

partner@cloudlite.ru - партнерская программа