我有幾個Django,我想在運行CentOS的單個docker主機上託管。我想有3層如何設計Docker路由和數據庫層?
- 網絡
- 應用
- 數據庫
網絡:我想在應用程序中的網絡層請求路由到不同的容器的nginx的容器層。我玩這個Docker容器中的1:1端口映射,將主機上的端口80暴露給容器。 Nginx的將使用直接請求適當的應用程序在應用程序層運行在端口8001-8010
應用:不適有幾個容器每個運行使用Gunicorn一個單獨Django應用程序上端口8001-8010
數據庫運行:一個容器爲每個應用程序運行MySQL並使用不同的數據庫。 MYSQL容器將有一個鏈接到它的數據卷用於持久性。
我知道你可以鏈接容器。但據我瞭解,我認爲它依賴於容器的啓動順序,即:如何在不啓動時將nginx鏈接到多個容器。
所以我的問題是
如何將網絡層連接到應用層時,在應用程序容器的編號/名稱在不斷變化。即:我可能會在線/離線帶來新的應用。我將如何更新nginx配置以及尋址是什麼樣子?
如何將應用程序層連接到數據庫層?我必須使用Docker鏈接嗎?在我的Django應用程序代碼中,我需要使用數據庫的主機名來連接。我會爲我的碼頭集裝箱的主機名放什麼?它能解決嗎?
有沒有我可以利用的參考架構?
感謝您提供的關於使用consul或etcd的鏈接。那些不工作在操作系統DNS名稱解析級別,雖然他們?即:我的nginx配置文件或我的django如何連接到一個端點而不重寫我的代碼? – CraigH 2014-12-05 02:21:22
領事與etcd一起工作https://consul.io/intro/vs/index.html。 [Etcd](https://github.com/coreos/etcd)是一個分佈式密鑰存儲和Consule,SkyDNS等,在etcd之上構建一個DNS。根據以下聲明,AkyDNS應該可用於所有Docker Containr:「我們設置skydns以將其名稱服務器綁定到docker0橋,以便它可用於容器。」我不知道我的nginx可以處理這個,也許你最終會得到這些[hipache](https://github.com/hipache/hipache)或[vulcand](https://github.com/mailgun/vulcand)。 – 2014-12-05 07:53:25