Контейнер доступа к полному доменному имени
У меня есть несколько Docker-контейнеров с веб-приложениями. К ним можно получить доступ в моей сети, используя IP-адрес хоста и номер порта, к которому я привязан в контейнере.
Я хотел бы иметь возможность доступа к приложениям через fqdn, например, app1.home.com (или home.com/app1, если это проще).
Я думаю, что для этого мне понадобится сервер dhcp и dns, работающий в моей сети. Я планирую настроить dnsmasq. Это позволило бы мне разрешить домен home.com локально.
Тогда я полагаю, что мне нужен прокси-сервер с некоторым описанием для маршрутизации на конкретный порт. Я знаю, что это может быть достигнуто с помощью nginx или apache, но я не знаю, как это сделать, и это кажется слишком сложным. Я думаю, что HAProxy может быть вариантом, опять же, я не знаю, как.
TL; DR: Как я могу обратиться к веб-приложениям, работающим в док-контейнерах, используя fqdn в моей домашней сети?
1 ответ
Просто настройте ваш докер-хост на несколько ips, по одному на каждое имя хоста, которое вы хотите настроить. Затем настройте dnsmasq для указания каждого ip на свое имя хоста, site1.home.com->XXXX, site2.home.com->YYYY Все эти ips будут принадлежать вашему докеру.
Затем запустите ваши контейнеры на хосте докера. Я использую Docker Swarm с оверлейной сетью, управляемой обратным прокси-сервером nginx. Я настроил Docker-контейнеры, чтобы они принадлежали этой оверлейной сети, и я указываю для них --names, чтобы у Docker-оверлейной сети были свои собственные dns, которые обратный прокси-сервер nginx должен использовать для указания на другие контейнеры.
Затем я настраиваю nginx, чтобы он указывал на другие контейнеры, используя dns на основе роя, в зависимости от ip, используемого для соединения с хостом докера. Поэтому http://XXXX/ переводится nginx, чтобы указывать на DNS-имя site1 в оверлейной сети. nginx перейдет к веб-странице контейнера site1 и вернет ее пользователю. Это слишком излишне, но имеет огромные преимущества в том, что делает это избыточно с небольшим временем простоя из-за непрерывного обновления.
Например: я захожу на home1.home.com в моем браузере. Это вызывает поиск DNS, изменяющий home1.home.com на XXXX. Я направлен на обратный прокси-сервер хоста докера nginx, который получает веб-страницу site1, которая размещена во внутренней оверлейной сети, на основе ip, который я использовал для подключения к хосту докера. Затем он представляет мне веб-страницу.