2016-04-05 35 views
1

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

有什麼建議嗎?希望這是有道理的!

感謝您的幫助!

回答

0

註冊表使用請求IP地址建立一種路徑。因此服務啓動,並在「註冊表」中註冊爲172.17.1.5:3001。如果這是唯一的方法,是否沒有辦法獲得服務的主機IP地址?

如果這些集裝箱在同一主機上運行(運行一個碼頭工人守護進程),你不需要註冊,因爲所有的容器通過一個共同的泊塢窗網看到對方(在其版本docker-compose creates by default 2)

如果這些容器在不同的主機上運行(每個主機都運行它們自己的docker守護進程),則需要多一個鍵值存儲以便跨VM虛擬機啓用Docker容器可見性,從而允許您將容器名稱解析爲其正確的IP跨主機。
請參閱「How to make Docker container accessible to other network machines through IP?」和this tutorial

http://i.stack.imgur.com/ahLaf.png

,它可以代替你的Redis的註冊表。

+0

謝謝你的回答!我可能錯誤輸入了,我不是說docker實例被註冊了。我的意思是當Docker內部運行的應用程序啓動時,它將自己註冊爲「微服務註冊表」。所以從其他客戶端,我可以簡單地調用{註冊表IP}/find?key = alerting,這將返回客戶端可以訪問「警報」應用程序的IP和端口。如果這有道理?相應地更新我的問題。 – iLikeBreakfast

+0

@iLikeBreakfast我的回答站立。註冊與否,這裏的關鍵要素是:你的容器在一臺機器上的一個docker守護進程中運行,還是在不同的主機上運行,​​每臺主機都有自己的docker守護進程? – VonC

+0

我想讓他們在不同的守護進程上運行。我認爲如果我們現在就完成這個工作,它會更容易擴展。所以3個容器運行在3個不同的虛擬機上。無論如何,外部應用程序如何連接到內部容器網絡?這甚至可能嗎?例如,讓'10.0.0.2'連接到容器'172.17.1.23'? – iLikeBreakfast