Предоставление контейнерного веб-приложения в домене Publi c - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь открыть свое контейнерное веб-приложение для Inte rnet через публичный c домен, но все статьи, кажется, учат, как играть с локальной сетью Docker, для пример как запустить DNS-сервер в контейнерах или с сервером DNS в Docker. Даже если я настрою DNS-сервер, который разрешает IP-адрес, например 172.20.0.3, в домен, такой как exmaple.com, служба DNS преобразует example.com в 172.20.0.3, который, очевидно, является только локальным для сети docker и недоступен. снаружи.

Сценарий кажется простым. У меня есть docker хост с общедоступным c stati c IP, скажем, 64.233.191.255, и у меня есть несколько доменов на нем. Каждый домен сопоставлен с веб-сервером и будет обслуживать (контейнерное) веб-приложение. Каждое приложение имеет свою собственную сеть, определенную в docker -compose.yml в разделе networks, в котором перечислены все другие службы, связанные с веб-приложением, например, mariadb, redis, et c. общаться. Должен ли я иметь DNS-сервер внутри каждого контейнера, который я создаю? Как преобразовать локальные адреса в IP-адрес stati c publi c, чтобы веб-приложения были доступны в соответствующих доменах через порт 80?
Я обнаружил службу ngrok, которая предоставляет контейнер через общедоступный c доменное имя вроде xxxx.ngrok.io, но это не то, что я хочу. Я хотел бы обслуживать мой сайт на своем собственном домене.

enter image description here

Для меня это оказалось совсем не тривиально. Кроме того, в документации Docker нет явного руководства, как это сделать. Я предполагаю, что это не так, как это должно быть сделано в реальном мире, поскольку они, вероятно, делают это через Kubernetes или OpenShift.
Должна ли я иметь конфигурацию bind9 на хосте или контейнерную bind9 для управления DNS-запросами? Нужны ли правила iptables для этого сценария?

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Вам необходимо сопоставить оба домена с c ip через DNS, а затем использовать обратный прокси-сервер для пересылки запросов на правильный сервер apache.

Таким образом, в основном 3 vhosts внутри docker host.

Vhost 1 (обратный прокси-сервер) получает запрос, сопоставляет домен с адресом Vhost 2 или Vhost 3.

https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html

1 голос
/ 27 февраля 2020

вы можете использовать обратный прокси с Nginx для каждого приложения. Например, вы запускаете два приложения на портах 3000 и 3001. Назначьте правильный DNS для каждого приложения.

как localhost: 3000 сопоставлений с example1.com

...