Я пытаюсь настроить стек докера для одновременного запуска некоторых моих приложений.Он будет развернут для нескольких клиентов на одном компьютере, и он немного сложен - 3 службы API и два веб-сайта.
Я хотел бы создать стек для каждого клиента, чтобы ограничить накладные расходы, необходимые для настройки этого приложения для нового клиента -Благодаря стеку я могу запускать эти apis и веб-сайты одновременно, предоставляя переменные среды.
У моей рабочей машины есть только один общедоступный IP-адрес.У меня есть докер с установленным режимом роя (необходимо использовать стеки).Однако мой рой - это всего лишь одна машина, и я думаю, что так будет долго - мне просто не нужно больше ресурсов.
Упрощенный составной файл (всего с двумя службами) выглядит следующим образом:
version: "3.2"
services:
auth_api:
image: my-registry/auth-api:latest
stdin_open: true
tty: true
ports:
- 8010:80
deploy:
mode: global
environment:
- some_var
volumes:
- /var/my-app/${INSTANCE_NAME}:/store
secrets:
- auth_certificate
office_web:
image: my-registry/office-web:latest
stdin_open: true
tty: true
ports:
- 8012:80
deploy:
mode: global
secrets:
auth_certificate:
external:
name: ${INSTANCE_NAME}-auth-identity-certificate
Этот стек создан, и мои приложения доступны на серверах общего IP с портами 8080 и 8081, что является нежелательным поведением.
Предполагая, что: у моего веб-сервера есть один общедоступный IP: A.B.C.D
Я настроил DNSуказать два поддоменов на мой веб-сервер:
A.B.C.D api.example.com
A.B.C.D web.example.com
Я хочу настроить весь стек и веб-сервер следующим образом:
- служба auth_api доступна для общедоступного IP-адреса через порт 80 только с конфигурацией имени хоста api.example.com
- служба office_web предоставляется для общедоступного IP-адреса через порт 80 только с настройкой имени хоста web.example.com
- обе службы НЕ доступны по общедоступным IP-адресам на опубликованных портах - 8080,8081
- , когда я создаю новый стек для нового клиента, я не хочу «что-то» (обратный прокси-сервер?) Автоматическиy заполнить новые публичные привязки имени хоста;Я могу предоставить их в качестве переменных label / env при создании стека, но я не хочу вручную редактировать что-то еще, кроме моего файла compose yaml
Как мне этого добиться?Без режима роя и стеков я использовал jwilder / nginx-proxy, который прекрасно работает, но стеки (режим роя) не поддерживаются этим замечательным образом докера.
Я не знаю, с чего начать, в «режиме без роя» я могу использовать конфигурацию портов в формате 127.0.0.1:8080:80, и мои контейнеры не были доступны по общедоступным IP-адресам.Я использовал jwilder / nginx-proxy, который автоматически заполняет IP-адрес контейнера и привязывает к нему общедоступный IP-адрес, используя имя хоста, передаваемое в качестве переменной env.
Как мне добиться чего-то подобного?