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