我们一直在将我们系统的一部分迁移到更多面向微服务的架构。为了运行这个,我们选择将它们作为docker容器运行。目前我们的架构如下:Docker到VM Networking
一)多个Web服务器,托管还是单片PHP应用程序
B)3个新的虚拟机,这将运行
- 的“提醒”微服务
- 一个蒙戈DB实例
- 自定义的microService注册表(基于Redis的)
所以,我的问题如下:
我们目前的基础设施都在10.0.0.0/24范围内。 Docker加速了172.x.1.x
范围内的实例。我如何获得(在10.0.0.0/24
上运行的)Web服务器连接到在“注册表”上登记的服务,例如172.17.1.3
(例如)?
我读过很多扩展,比如swarm,compose等等。但是这些似乎并不能解决网络问题。
你可能会说“你已经公开了警报服务的相关端口,只是连接到该虚拟机的IP地址”,但问题是当服务(即Docker容器内的NodeJS应用程序)启动时它注册其暴露的端口与服务“注册表”。注册表使用请求的IP地址来建立一种路径。因此服务启动,并在“注册表”中注册为172.17.1.5:3001
。如果这是唯一的方法,是否没有办法获得服务的IP地址主机?
有什么建议吗?希望这是有道理的!
感谢您的帮助!
谢谢你的回答!我可能错误输入了,我不是说docker实例被注册了。我的意思是当Docker内部运行的应用程序启动时,它将自己注册为“微服务注册表”。所以从其他客户端,我可以简单地调用{注册表IP}/find?key = alerting,这将返回客户端可以访问“警报”应用程序的IP和端口。如果这有道理?相应地更新我的问题。 – iLikeBreakfast
@iLikeBreakfast我的回答站立。注册与否,这里的关键要素是:你的容器在一台机器上的一个docker守护进程中运行,还是在不同的主机上运行,每台主机都有自己的docker守护进程? – VonC
我想让他们在不同的守护进程上运行。我认为如果我们现在就完成这个工作,它会更容易扩展。所以3个容器运行在3个不同的虚拟机上。无论如何,外部应用程序如何连接到内部容器网络?这甚至可能吗?例如,让'10.0.0.2'连接到容器'172.17.1.23'? – iLikeBreakfast