🐳 Примеры, как подключать контейнеры Docker к сети

Мануал

Одна из классных функций, встроенных непосредственно в Docker, – это работа в сети.

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

В этом руководстве вы узнаете, как объединить в сеть два или более контейнера Docker в системе Linux с помощью командной строки.

Это будет работать в любом дистрибутиве Linux. Ознакомьтесь с пошаговыми инструкциями ниже, чтобы узнать, как это сделать.

В этом руководстве мы рассмотрим:

Как объединить контейнеры Docker в сеть

Подключение контейнеров Docker к сети

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

Мы можем начать с развертывания нашего первого контейнера Docker с именем sanbox1, для которого мы позже создадим сетевой линк:

# docker run -it --name sandbox1 -h sanbox1 itsecforu/sandbox /bin/bash

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

Следующая команда Linux развернет второй и на этот раз родительский контейнер Docker с именем sandbox2.

Мы также будем использовать флаг –link, который создаст так называемые родительско-дочерние отношения с ранее развернутым контейнером sandbox1.

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

# docker run -it --name sandbox2 -h sandbox2 --link sandbox1:sandbox1 itsecforu/sandbox /bin/bash

Вышеупомянутая команда docker использовала флаг –link, который ожидает два аргумента, разделенных двоеточием.

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

Второй аргумент, также sandbox1, является внутренним псевдонимом, используемым sandbox2 для разрешения конфигурации сети sandbox1 с помощью файла конфигурации /etc/hosts:

# grep sandbox1 /etc/hosts
172.17.0.41     sandbox1

В зависимости от используемой конфигурации портов вашего дочернего контейнера вы также можете извлечь конфигурацию sandbox1 из переменных системной среды.

Например:

# env
HOSTNAME=sandbox2
TERM=xterm
SANDBOX1_PORT=tcp://172.17.0.37:7555
SANDBOX1_PORT_7555_TCP=tcp://172.17.0.37:7555
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SANDBOX1_PORT_7555_TCP_ADDR=172.17.0.37
SANDBOX1_PORT_7555_TCP_PROTO=tcp
SHLVL=1
HOME=/root
SANDBOX1_NAME=/sandbox2/sandbox1
SANDBOX1_PORT_7555_TCP_PORT=7555
_=/usr/bin/env

Таким образом, мы можем просто использовать алиас нашего дочернего контейнера для подключения к нему из родительского контейнера sandbox2 без необходимости жесткого кодирования его IP-адреса:

# ping -c 1 sandbox1
PING sandbox1 (172.17.0.41): 56 data bytes
64 bytes from 172.17.0.41: icmp_seq=0 ttl=64 time=0.071 ms
--- sandbox1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.071/0.071/0.071/0.000 ms

а также доступ к любым портам и сервисам:

# nmap -p 22 sandbox1

Starting Nmap 6.47 ( http://nmap.org ) at 2015-05-18 08:58 UTC
Nmap scan report for sandbox1 (172.17.0.41)
Host is up (0.000090s latency).
PORT   STATE SERVICE
22/tcp open  ssh
MAC Address: 02:42:AC:11:00:29 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.50 seconds

Это все, что нужно сделать.

Наши два контейнера теперь могут связываться друг с другом, и между ними работают сервисы, например SSH.

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

Заключение

В этом руководстве мы увидели, как связать контейнеры Docker вместе в системе Linux.

Это относительно простая задача, которая решается с помощью опции Docker –link.

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

Добавить комментарий