Docker — связывание контейнеров
Требования : Докер
Во время разработки нашего приложения бывают моменты, когда нам нужны два контейнера, чтобы иметь возможность общаться друг с другом. Возможно, службы обоих контейнеров зависят друг от друга. Это можно сделать с помощью 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. Таким образом, вы можете создать свою собственную мостовую сеть, которая позволит вам установить соединение между вашим контейнером.