Docker Compose
是Docker官方自動化腳本編程(Orchestration)
應用之一,主要任務就是能快速在集群中佈建分布應用。
之前篇章中有提到Dockerfile
,它可以自訂義您想要讓執行中來的容器呈現出什麼樣的應用體現,但這最終的天花板就是讓用戶需要管理一個個獨立的映像容器。
這看似無傷大雅,但試想一下只管理個三五個可能沒什麼?十個開始有點辛苦,加上容器與容器間的服務任務關聯性就更讓人開始眼花撩亂,再者一個個來把容器啟動似乎太慢,所以把所需關聯容器的專案寫成一個docker-compose.yml
,最後透過Docker Compose
協助一次啟動yml內描述的多個容器,讓效率更為高效。
所以就有了這樣一個好東西,Docker Compose,它是允許用戶在一個YAML模型範本
中直接定義一組相關聯的應用容器,其實也可以當作是一組組專案任務的概念項目,舉例一個電商網站容器+後端資料庫容器內容描述腳本都在一個EC.YAML,無論是部署,管理更新等運帷作業,這都是最典型好理解的體現之一。
下圖是簡易的Docker Compose關聯
(LB+Web+DB)分別可以看成是三層式的前中後端架構,透過一個範本描述這三者各自的環境與它容之間的關係,直接根據描述自動化部署。
我們來體驗一下Docker Compose這樣的服務能帶給我們什麼樣的新感受
前置作業
參考前篇,必要安裝流程Day 8. Docker Engine on Ubuntu 18.04 安裝示範
docker-compose環境設置
從github
下載docker-compose二進位制檔案來安裝
下載最新版的docker-compose檔案
curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
新增可執行許可權
chmod +x /usr/local/bin/docker-compose
測試安裝結果
docker-compose --version
pip安裝(Python套件)
pip install docker-compose
安裝進行中...
安裝程序完成
docker-compose檔案結構範例
補充一下:請確認已安裝以下兩個條件:
一個簡單入門的docker-compose.yml檔案示範
version: '2'
services:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
admin:
image: adminer
ports:
- 8080:8080
上述yml內容主要目的是啟動兩個容器服務,一個是MySQL資料庫,另一個是MySQL的後台網頁管理服務。
MYSQL_ROOT_PASSWORD是用來管理者用來登入資料庫的密碼。
撰寫一個docker-compose.yml在自訂的路徑下,並確認切換此檔案路徑位置
確認剛剛建立更新的yml內容無誤
docker-compose up -d
執行所有在docker-compose.yml檔案裡設定Docker Image並執行容器,另外-d參數代表背景執行。
出現的因為預設是透過Python 2版本來接應,故無法支援,所以以下做法就是強制使用Python 3的版本
Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in a future release.
python2 --version
python3 --version
apt-get -q install python3-pip
強制使用python3進行中
安裝完成
pip3 install --quiet docker-compose
docker-compose up -d
docker-compose ps
Docker VM on Azure,因為我想要直接從外部透過Public IP連線,新增一筆Inbound Rule 8080
DB後台管理登入狀態如下
登入IP:上圖網卡上綁定的公用IP
Account:root
Password:123456
想要查看執行中的log可使用以下指令,會根據不同的模組服務分開檢視紀錄狀態
docker-compose logs
Admin_1
DB_1
最後附上停止 / 刪除執行的所有容器做為結尾,需要可以自行使用。
docker-compose stop
docker-compose rm