介紹過Docker Volume和Docker Network的運作原理和使用方式,以及建置Docker映像檔的Dockerfile撰寫技巧,接下來說明部署多容器架構工具Docker Compose,以及如何編寫相關之部署架構定義檔(docker-compose.yml),並可結合Docker Network和Docker Volume功能,輕鬆地就可以架設出完整的軟體系統架構。
前面提到docker-compose.yml內容與docker run指令可相互對應,上面的db服務,與下面MySQL容器啟動指令是同樣效果:
而WordPress容器的啟動指令,如下所示:
從上面範例可看出,如果熟悉docker run指令就可輕易寫出docker-compose.yml定義檔,若遇到不確定如何撰寫時,只要查閱一下官方Compose說明文件(https://docs.docker.com/compose/compose-file/),找出所需關鍵定義,複製貼上其所寫之範例,就可修改成適合自身所需的Docker Compose定義檔,此WordPress與MySQL的兩層式架構圖,如圖2所示。
|
▲圖2 WordPress兩層式架構。 |
解說完此定義檔之後,使用docker-compose來啟動這WordPress服務,只須執行「docker-compose up -d」,便會先下載相關容器映像檔,再建立network和volume環境,最後啟動兩個容器,上述步驟在圖3操作畫面可清楚看出。
|
▲圖3 Compose自動建立Docker Network。 |
而且透過「docker network ls」查詢目前Docker Network清單,會新增一個名為「XXXXXX_default」的VXLAN,因為Docker Compose會自動建立一個以目錄名稱「+default」的Docker Network,以便讓整個系統中各個服務之間可以透過容器名稱來溝通,從圖4可得知此服務是使用172.18.0.0/16網段。
|
▲圖4 查詢Compose所建立的網段。 |
結合vShpere Docker Volume plugin
此系列文章「實際動手操作Docker‧學會Volume及Network」(http://www.netadmin.com.tw/article_content.aspx?sn=1709050003),曾示範過使用vSphere Docker Volume Plugin,當安裝好Plugin之後,在docker-compose.yml定義檔中亦可使用此Volume外掛,只需要在第26行的db_data下方指定使用何種driver定義,並加上額外的driver_opts參數(下面範例是設定vmdk的容量大小),便可自動建立好VMware vmdk虛擬硬碟,將MySQL資料庫持久儲存到vmdk之中。
中標 Docker Compose指令說明
前面提到「docker-compose up」指令是第一個常用的指令,使用Compose,除了理解docker-compose.yml定義檔之外,還需要學習docker-compose指令的使用,以下針對各個指令說明。
build
等同「docker build」,若docker-compose.yml檔案中使用到build定義,則建置其目錄底下的Dockerfile,若只用image定義,便會回應「XXXXX uses an image, skipping」。
bundle
依據docker-compose.yml定義檔產製出Distributed Application Bundle(DAB)格式檔案,其格式附加映像檔的SHA-256雜湊碼,原本用於部署到Docker Swarm叢集環境,但之後Compose第三版格式推出後,可直接透過「docker stack」部署docker-compose.yml,無須轉換,官方說明文件(https://docs.docker.com/engine/swarm/stack-deploy/)。
config
用來檢查docker-compose.yml定義檔是否有錯誤,若正常會列出定義檔內容。
create
等同「docker create」,先建立好整個docker-compose.yml所定義的容器服務,之後再用「docker-compose start」啟動相關服務。
down
將依據docker-compose.yml定義檔所建立的相關容器和資源全部移除。
events
顯示定義檔所執行之相關容器的即時運行事件。
exec
等同「docker exec」,執行exec指令登入到容器內,登出並不會讓容器停止。