Docker — связывание контейнеров

Опубликовано: 24 Января, 2023

Требования : Докер

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

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

Существует два способа соединения контейнеров:

  • Способ по умолчанию.
  • Пользовательский способ.

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

Способ по умолчанию:

Как только мы устанавливаем докер и создаем контейнер, мостовая сеть по умолчанию назначается докеру под именем Docker0. IP-адрес находится в диапазоне 172.17.0.0/16 (где 172.17.0.1 назначен интерфейсу)

Теперь контейнеры, которые мы создадим, получат свои IP-адреса в диапазоне 172.17.0.2/16.

Шаг 1. Создайте два новых контейнера, webcon и dbcon.

$ docker run -it --name webcon -d httpd
$ docker run -it --name dbcon  -e MYSQL_ROOT_PASSWORD=1234 -d mysql

Вы можете использовать любое изображение, в нашем случае мы будем использовать образы MySQL и httpd .

Шаг 2. Проверьте IP-адреса новых контейнеров.

$ docker network inspect bridge

С помощью этих IP-адресов хост докера устанавливает соединение с контейнерами.

Шаг 3. Войдите внутрь контейнера webcon и попробуйте пропинговать контейнер dbcon, если вы получите ответ, это означает, что соединение по умолчанию установлено.

$ docker container exec -it webcon /bin/bash  
(to get into the webcon container)
$ ping "172.17.0.3" 
(ping the dbcon container)

Пользовательский способ:

Шаг 1. Создайте собственную мостовую сеть.

$ docker network create <bridge_name> 
(This will create a bridge with custom subnet and gateway)

Мы также можем указать собственную подсеть и шлюз.

$ docker network create --subnet <your_subnet>
 --gateway <Your_gateway> bridgename

Шаг 2. Проверьте, создана ли ваша сеть.

$ docker network ls

Шаг 3. Свяжите или свяжите два контейнера в сети, которую вы только что создали, используя флаг «-net».

$ docker run --name <container_name>
 --net=<custom_net> 
-d <image_name>

Мы использовали образы httpd и alpine для наших контейнеров.

Шаг 4. Зайдите внутрь контейнера webnew (IP-10.7.0.10) и пропингуйте контейнер alpine (IP-10.7.0.2)

$ docker exec -it webnew /bin/bash 
$ ping "10.7.0.2" (inside the webnew container)

Если вы начнете получать пакеты из контейнера Alpine, значит, вы успешно установили соединение между обоими контейнерами, используя собственную сеть OUR-NET. Таким образом, вы можете создать свою собственную мостовую сеть, которая позволит вам установить соединение между вашим контейнером.