上篇中,我們主要介紹了使用docker-compose對(duì)Windows Docker單服務(wù)器進(jìn)行遠(yuǎn)程管理,編譯和部署鏡像,并且設(shè)置容器的自動(dòng)啟動(dòng)。但是,還有一些重要的問題沒有解決,這些問題不解決,就完全談不上運(yùn)維:
問題一:如此部署的應(yīng)用,在宿主機(jī)外部,只能通過宿主機(jī)的ip加一個(gè)個(gè)特定的端口來訪問每個(gè)容器內(nèi)的應(yīng)用,這顯然是不滿足實(shí)際需求的。
問題二:相比于將應(yīng)用直接部署在有UI界面的Windows Server,因?yàn)槊總€(gè)應(yīng)用部署于自己的Windows Docker容器,當(dāng)應(yīng)用運(yùn)行時(shí)發(fā)生各種問題時(shí),比如,cpu高,內(nèi)存高,訪問變慢等等,如何才能方便地排查問題呢?即使你愿意一個(gè)個(gè)容器attach上去,也因?yàn)樗鼪]有UI,遠(yuǎn)沒有傳統(tǒng)有UI界面的Windows Server上容易。所以,我們必須有必要的工具來更方便的監(jiān)控容器的運(yùn)行。
下篇
負(fù)載均衡和反向代理
日志解析和監(jiān)控
負(fù)載均衡和反向代理
要解決問題一:
首先,我們需要一個(gè)機(jī)制,當(dāng)用戶訪問我們的ip或域名時(shí),服務(wù)器能根據(jù)不同的域名,或者不同的子路徑,在相同的端口比如80或者443,從每個(gè)應(yīng)用容器返回內(nèi)容——這就是反向代理;
接著,我們不希望我們的應(yīng)用在更新、系統(tǒng)維護(hù)、或者局部故障時(shí)無法提供服務(wù),所以,每個(gè)部署的應(yīng)用不能是單點(diǎn),那么,如果同一個(gè)應(yīng)用部署了多個(gè)容器實(shí)例,如何才能讓他們Serve相同的域名和URL請(qǐng)求呢?——這就是負(fù)載均衡;
通常,支持反向代理的組件,往往也同時(shí)提供負(fù)載均衡功能。例如:F5、nginx、Apache2、HAProxy甚至IIS的ARR等。不同的方案可能側(cè)重點(diǎn)略有不同,我們可以根據(jù)實(shí)際情況選擇不同的方案。另外,既然我們的應(yīng)用部署在Windows Docker服務(wù)器,那么最好我們所用的代理組件同樣能部署在Windows Docker容器,這樣我們就能用一致的流程和工具來管理。下面的示例中,我們選擇Apache2,實(shí)現(xiàn)一個(gè)部署于Windows Docker部署的反向代理加負(fù)載均衡器。
為了演示負(fù)載均衡,我們新建一個(gè)two-instances-demo目錄,其中docker-compose.yml里為iis-demo添加兩個(gè)不同內(nèi)部ip的容器實(shí)例,再添加一個(gè)apache容器,它的Dockerfile定義在apache目錄中。
version: "2.1"services: apache: build: . image: "apache-proxy:1.0" ports: - "80:80" networks: nat: iis-demo-1: