Рубрики
Uncategorized

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

Знаете ли вы, что вы можете использовать имя сервиса контейнера или идентификатора для подключения к нему на Docker? Если … помечен с devops, codeNewie, docker.

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

Если вы использовали --Линк Опция при запуске контейнера или Docker составляется, вы можете вызвать контейнер по его названию или идентификатору от других контейнеров. Но как эта работа?

Ответ прост: DNS.

Всякий раз, когда вы запускаете контейнер, Docker предоставляет вам сеть для вас и использует службу DNS, предоставляемой Docker Daemon.

Вы можете переопределить сеть докеров по умолчанию и настройки DNS Проверьте документы здесь

Предположим, что у вас есть 3-х уровневое применение: Frontend, Backend и база данных.

Ваша бэкэнда должна быть в состоянии подключиться к базе данных. Самый безопасный способ сделать это — сохранить вашу базу данных в частной сети для подключения к ней.

С докером вы можете использовать наименование услуги или Контейнер ID Как имя сервера в вашем файле конфигурации.

Бывший.:

cn = mysql.connect(user='produser',
                 password='secretvalue',
                 host='svc_database', # this is the service name in the incoming example
                 database='mysuperapp')

Клонировать следующий репозиторий, используя команду ниже:

Git Clone Git@github.com: GDI3D/Docker-DNS.GIT.

Теперь посмотрите на файл Docker-Compose.yml В репозитории вы только что клонировали.

version: "3.9"  # optional since v1.27.0
services:
  svc_frontend:
    image: busybox:latest
    command: top
  svc_database:
    image: busybox:latest
    command: top
  svc_backend:
    image: busybox:latest
    command: top

Вы можете увидеть три Услуги, определенные:

  1. svc_frontend : Приложение внешний интерфейс
  2. svc_database : База данных приложений
  3. svc_backend : Backend приложение

Чтобы облегчить все возможное, мы используем Anybox Image для имитации услуг.

Запустите контейнеры, используя Docker-Compose Up -D Отказ

Вы можете проверить, что контейнеры используют докер PS.

Мы собираемся проверить следующее:

  1. Где работает сервис Docker DNS (IP-адрес)
  2. Попробуйте пинговать контейнер по имени и идентификатору службы.
  3. Разрешены ли запросы Docker DNS Service?

Это наши контейнеры с их именем и идентификаторами обслуживания:

1ee9c76938ee svc_frontend
fe0228bd99a5. svc_database.
A96E0CB74351. svc_backend.

Где находится сервис DNS DNS?

Давайте доступ к svc_backend Контейнер и тип Cat/etc/resolv.conf.

Здесь вы можете увидеть, что Imserver был указан на 127.0.0.11 Отказ Это сервис Docker DNS, предоставленный Docker Daemon.

Pro Tip: вам не нужно вводить весь идентификатор контейнера для выполнения операции, просто используйте первые два или три символа

Попробуйте пинговать контейнер по имени сервиса и идентификатор

Вы можете проверить подключение к svc_database Использование команды Ping:

Как вы можете видеть, мы получаем тот же ответ при вызове его именем его обслуживания svc_database или Docker ID FE0228BD99A5 Отказ

Они оба решают к тому же IP 172.19.0.3 как и ожидалось.

Разрешены ли запросы от Docker DNS Service?

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

Запуск этих двух команд даст нам лучшее понимание того, что происходит: nslookup svc_database и nslookup fe0228bd99a5.

Server:     127.0.0.11
Address:    127.0.0.11:53

Non-authoritative answer:
Name:   svc_database
Address: 172.23.0.2

--------------------------

Server:     127.0.0.11
Address:    127.0.0.11:53

Non-authoritative answer:
Name:   fe0228bd99a5
Address: 172.19.0.3

Из результатов Nslookups мы можем видеть, что запрос сделан с использованием службы Docker DNS в 127.0.0.11, и что, опять же, используя имя обслуживания svc_database или контейнер ID FE0228BD99A5 Место назначения одинаковый IP 172.19.0.3

Если вы хотите узнать больше о том, как работает Docker Networking, вы можете проверить Официальная документация

Оригинал: «https://dev.to/gdi3d/how-to-connect-docker-containers-4hai»