我們一直在將我們系統的一部分遷移到更多面向微服務的架構。爲了運行這個,我們選擇將它們作爲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