Docker 輕量虛擬化 容器

部署Docker Compose 實例示範定義檔撰寫

2017-12-19
介紹過Docker Volume和Docker Network的運作原理和使用方式,以及建置Docker映像檔的Dockerfile撰寫技巧,接下來說明部署多容器架構工具Docker Compose,以及如何編寫相關之部署架構定義檔(docker-compose.yml),並可結合Docker Network和Docker Volume功能,輕鬆地就可以架設出完整的軟體系統架構。

當中詳細的docker-compose.yml定義檔如下:


其中的差別在於,將原本WordPress服務的HTTP 80連接埠移到webproxy服務,並且設置了兩個Docker Network,包括mysql和proxy,而webproxy服務的容器是採用Dockerfile所建置,其內容如下:


主要使用官方的Nginx:alpine映像檔,並移除原本預設的設定檔,新增具備反向代理的proxy.conf,關鍵在第5行的「proxy_pass http://wordpress;」,會將外部的HTTP Request連線重導向到WordPress容器,內容如下:


將上述檔案依目錄結構配置好,在docker-compose.yml同一目錄下執行「docker-compose up -d」,其結果如圖7所示。


▲圖7 Compose up執行結果。

在Compose指令中有解說scale的用途,此時將WordPress服務從單一容器擴展成三個,輸入「docker-compose scale wordpress=3」,就會把WordPress服務容器新增到三個。

而前端的webproxy服務,因為Docker Network有內建DNS查詢功能,所以登入到webprxoy容器,執行「docker-compose exec webproxy sh」,接著輸入「nslookup wordpress」,便會列出所有WordPress容器的IP位址,因此webproxy服務會以輪循方式(round-robin),將HTTP請求分攤到這三個容器(圖8)。


▲圖8 Compose scale執行結果。

此三層式架構除了可橫向擴展WordPress服務(Application)好處外,因webproxy跟MySQL容器是不同的網段,是分別屬於Proxy和MySQL的Docker Network,因此外部的連線無法直接存取到資料庫,可增加整體安全性。

除非是透過WordPress容器才能存取到MySQL資料庫,因為WordPress容器同時屬於Proxy和MySQL的網段,所以容器內有兩張虛擬網卡,如圖9所示。


▲圖9 查詢WordPress容器的網路資訊。

結語

從以上兩個WordPress範例可以感受到容器架構可攜性,看到使用上的方便性,筆者在分享Docker技術時,常談到開源精神從Open Source演進到Open Hardware,Docker技術的出現是Open Architecture時代到來,透過這個docker-compose.yml定義檔便可解決架構面問題。

目前軟體系統架構正朝向建築工程的藍圖方式,透過撰寫Compose或K8S YAML檔,就可建構出龐大的軟體架構,軟體架構設計終於逐漸符合工程等級,擺脫因人手造而有天差地北,甚至是無法使用的重大問題。之後在介紹Docker Swarm容器叢集時,也會以此WordPress範例來說明,並可部署到不同台伺服器上,透過Master-Worker架構支撐複雜的容器系統架構。

<本文作者:鄭淳尹,Docker/Moby.Taipei社群共同發起人,曾任宏碁eDC維運工程師,玉山銀行資訊處專員,現為臺北榮民總醫院資訊工程師,系統維護及開發設計超過15年。開源技術愛好者,陸續在COSCUP開源人年會、Container Summit研討會、台灣微軟開發者大會、群益期貨和永豐金證券等分享資訊技術,並在多間大學資工系擔任Docker容器技術講師。現任微軟MVP,並翻譯審閱多本容器技術書籍。>


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!