Как назначить доменные имена контейнерам в docker
Я много читаю в эти дни о том, как настроить и запустить стек docker. Но одна из вещей, которую я всегда упускаю, - это как настроить, чтобы определенные контейнеры отвечали на доступ через свое доменное имя, а не только имя контейнера с помощью Docker dns.
Я имею в виду, что, скажем, у меня есть микросервис, который доступен извне, например: users.mycompany.com, он пойдет до конца к контейнеру микросервиса который регулирует потребителей в API
затем, когда я пытаюсь получить доступ к customer-list.mycompany.com он будет идти до контейнера микрослужб, который обрабатывает списки клиентов
конечно, используя Docker dns, я могу получить к ним доступ и связать их в сеть docker, но это действительно работает только для доступа к контейнеру к контейнеру, но не к интернету к контейнеру.
кто-нибудь знает, как я должен это делать? Или лучший способ это устроить.
2 ответов
Итак, вам нужно использовать концепцию публикации портов, чтобы порт из вашего контейнера был доступен через порт с вашего хоста. Используя это, вы можете настроить простой proxy_pass из nginx, который будет перенаправлять users.mycompany.com myhost: 1337 (предполагая, что вы опубликовали свой порт в 1337)
Итак, если вы хотите это сделать, вам нужно настроить контейнер для предоставления определенного порта с помощью:
docker run -d -p 5000:5000 training/webapp # publish image port 5000 to host port 5000
вы можете затем от вашего хоста curl ваше имя localhost:5000 для доступа к контейнеру.
curl -X GET localhost:5000
Если вы хотите настроить доменное имя спереди, вам понадобится экземпляр веб-сервера, который позволит вам директива proxy_pass ваше имя хоста для вашего контейнера.
т. е. в nginx:
server {
listen 80;
server_name users.mycompany.com;
location / {
proxy_pass http://localhost:5000;
}
}
Я бы посоветовал вам следовать в этом уроке, и, возможно, проверить docker запустить ссылку
насколько я знаю, Docker не предоставляет эту функцию из коробки. Но наверняка есть несколько обходных путей. На самом деле вам нужно развернуть DNS на вашем хосте, который будет различать контейнеры и разрешать их доменные имена в динамических IPs. Поэтому вы можете попробовать:
разверните некоторые решения DNS с поддержкой Docker (я предлагаю вам использовать SkyDNSv1 / SkyDock);
настройте ваш хост для работы с этим DNS (по умолчанию SkyDNS заставляет контейнеры знать друг друга по имени, но хост об этом не знает);
запустите контейнеры с явным --hostname (вы, вероятно, будете использовать scheme container_name.имя изображения.разработка.skydns.local)
вы можете пропустить Шаг #2 и запустить браузер внутри контейнера: он обнаружит контейнер веб-приложения по имени хоста.