Да, это возможно.Для этого вы можете использовать обратный прокси-сервер веб-серверов вместе с Обнаружение службы докера .
Обнаружение службы докера в основном работает, когда вы подключаете несколько контейнеров докера к одной и той же сети, так что вы можете получить доступ к контейнерам, используя имя хоста контейнера.Подвох здесь в том, что эти контейнеры должны быть подключены к одной и той же сети.
Поскольку вы упомянули, что часть приложения Dockerized и живет отдельно, существуют различные решения.
Допустим,что:
- Nginx - это веб-сервер, который работает на сервере 1.
- Dockerized App находится на сервере 2.
- Сервер1 и сервер2 могут взаимодействовать друг с другом.
- Вы знаете Docker, Docker Swarm.
Использование Docker Swarm и обнаружение служб: * Рекомендуется *
Создать Docker Swarm кластер и подключитьсяоба сервера.Затем создайте оверлейную сеть .После этого запустите Nginx на сервере server1 в той же сети и запустите приложение dockerized на сервере server2 в той же сети. Теперь вы можете использовать Nginx proxy_pass
для подключения к докер-приложению server2 .
Использование Docker и сопоставления портов:
Запустите приложение Dockerized на карте server2 и порты с помощью привязки порта докера .В server1 используйте обратный прокси-сервер для подключения к сопоставленным портам server2.
Примечание:
В обоих случаях убедитесь, что
- И server1, и server2 могут связываться друг с другом.
- Откройте соответствующие порты в брандмауэре согласно соответствующей документации.
- Вы также можете использовать другие веб-серверы, такие как apache, и можно выполнить те же действия.
Ограничения: (Применимо только для обратного прокси-сервера Nginx)
Когда перезапускаемое приложение перезапускается, кэш Nginx не обновляется, так как это может привести к ошибке 502 Bad Gateway.Чтобы справиться с этим, вам может понадобиться заставить Nginx обновлять кэш один раз за определенный интервал. Обратитесь к моему ответу, чтобы узнать больше о том, как это сделать .