Docker Compose 可以實現(xiàn) Docker 容器集群的編排,可以通過 docker-compose.yml
文件,定義我們的服務(wù)及其需要的依賴,輕松地運行在測試、生產(chǎn)等環(huán)境
文檔
Product manuals
Compose file version 3 reference
Docker 從入門到實踐 【中文】
安裝 Compose
Compose 依賴 Docker Engine,所有要保證環(huán)境安裝了 Docker,可參考官方教程,主要分為兩步:
# 1. 下載 Compose 只執(zhí)行文件到 usr/local/bin/ 目錄 # 下載失敗可以參考下一小結(jié)提供地址安裝 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 2. 對 Compose 可執(zhí)行文件添加運行權(quán)限 sudo chmod +x /usr/local/bin/docker-compose # 輸入下面命令查看幫助,測試安裝是否成功 docker-compose -h
Compose 開源在 Docker 官方的 GitHub 倉庫:docker/compose,所有的 Compose 都會發(fā)布在倉庫的 Releases 里,步驟1就是使用 curl 命令從 Releases 里下載可執(zhí)行文件,uname -s
和uname -m
可以讀取系統(tǒng)的內(nèi)核名稱和硬件架構(gòu),用來匹配需要的 Compose 版本, curl
的 -L 參數(shù)會讓 HTTP 請求跟隨重定向(默認(rèn)不跟隨),-o (小寫o) 會將服務(wù)器響應(yīng)保存成文件,直接下載到:usr/local/bin/ 下,文件名為:docker-compose,因為這個路徑已經(jīng)在環(huán)境變量中了,所以完成步驟2,添加可執(zhí)行權(quán)限后,就可以在任意位置使用了
直接從 GitHub 下載比較慢可以通過以下地址下載:
# https://vuepress.mirror.docker-practice.com/compose/install/ sudo curl -L https://download.fastgit.org/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
入門
Compose 的模版指令與 Docker 的 run 命令相關(guān)參數(shù)很相似,忘記了 docker 命令可以參考之前的一篇博客:Docker 實踐及命令梳理
Compose 中有兩個重要的概念:
- 服務(wù) (service):一個應(yīng)用的容器,實際上可以包括若干運行相同鏡像的容器實例
- 項目 (project):由一組關(guān)聯(lián)的應(yīng)用容器組成的一個完整業(yè)務(wù)單元,在
docker-compose.yml
文件中定義
docker-compose.yml
格式如下,注意:YAML 文件必須要鍵值之間的 :
后面必須有一個空格,縮進(jìn)表示層級,要注意縮進(jìn)
有使用到的 volumes 和 networks 必須聲明
# 指定版本 version: "3" # 服務(wù)的集合 services: # 其中一個服務(wù),服務(wù)名為:webapp webapp: # 指定該服務(wù)使用的鏡像 image: examples/web # 端口映射 ports: - "80:80" # 數(shù)據(jù)卷 volumes: - "/data"
簡單上手
在一個 Compose 中啟動 Tomcat, MySQL, redis,創(chuàng)建 docker-compose.yml
version: "3.0" services: tomcat: container_name: mytomcat # --name image: tomcat:8.0-jre8 ports: - "8080:8080" volumes: - "tomcatwebapps:/usr/local/tomcat/webapps" networks: - some_network # tomcat 服務(wù)依賴于 mysql 和 redis depends_on: - mysql - redis mysql: container_name: mysql image: mysql:5.7.32 ports: - "3306:3306" volumes: - "mysqldata:/var/lib/mysql" - "mysqlconf:/etc/mysql" environment: - MYSQL_ROOT_PASSWORD=1234 networks: some_network: redis: container_name: redis image: redis:5.0.10 ports: - "6379:6379" volumes: - "redisdata:/data" command: "redis-server --appendonly yes" networks: some_network: # 使用到的 volumes 和 networks 必須聲明 volumes: tomcatwebapps: mysqldata: mysqlconf: redisdata: networks: # 聲明名稱為 “some_network” 的網(wǎng)絡(luò) some_network:
在 docker-compose.yml
所在路徑執(zhí)行 docker-compose up
啟動 Compose 項目,它會下載使用到的鏡像并在前臺運行打印日志,可以使用 Ctrl + C 終止
如果需要后臺運行執(zhí)行 docker-compose up -d
,這時候使用 docker ps
可以看到 Compose 已經(jīng)根據(jù) yaml 創(chuàng)建了相關(guān)的容器,使用 docker-compose down
停止 Compse 并移除自動創(chuàng)建的網(wǎng)橋
使用 docker network ls
查看網(wǎng)絡(luò)或者 docker volume ls
查看數(shù)據(jù)卷,Compose 定義的網(wǎng)絡(luò)或數(shù)據(jù)卷名稱格式為:docker-compose.yml所在文件夾的名稱加上下劃線再加上 yaml 中定義名稱,如果在 “dockerfile” 文件夾下創(chuàng)建 yaml 文件并啟動,那么網(wǎng)絡(luò)名稱為:dockerfile_some_network
tomcat 服務(wù)使用了 depends_on
,表示它依賴于 redis 和 mysql 服務(wù),Compose 將優(yōu)先啟動它的依賴再啟動它
命令梳理
Docker Compose 的命令與 Dokcer 類似,可以使用 –help 參數(shù),就可以查詢到到對應(yīng)命令的使用方法
docker-compose --help
默認(rèn)啟動的模版文件名為 docker-compose.yml,可以使用 -f 指定自定義的模版文件
可以通過 config 命令,檢查模版文件語法是否正確
docker-compse 也包含很多子命令:
啟動停止相關(guān):up, down, restart, stop, pasue, unpause
資源相關(guān):ps, top, kill, run
進(jìn)入容器:exec
查看日志:logs
很多子命令都可以在后面跟上某個具體的 service 名稱,定向地操作,下面不一一舉例,
可以使用docker-compose help
再跟上子命令名稱,查詢其用法
# 后臺啟動 yaml 定義的所有容器 docker-compose up -d # 僅啟動 mysql 這個service,會啟動其依賴的 service docker-compose up mysql 指定啟動的server名稱, # 停止容器并移除自動創(chuàng)建的網(wǎng)橋 docker-compose down # 重啟所有 service 后面可以指定上某個具體的 service docker-compose restart # 暫停 和 恢復(fù) docker-compose pause docker-compose unpause # 進(jìn)入 redis 這個 service 使用 exit 退出 docker-compose exec redis bash # 列出當(dāng)前 yaml 中定義的容器的信息 docker-compose ps # 刪除當(dāng)前 yaml 中定義的容器,需要先 stop,后面可以指定上某個具體的 service docker-compose rm # 查看各個 service 容器內(nèi)運行的進(jìn)程情況 docker-compose top # 查看日志默認(rèn)查看 yaml 所有的,可以跟上具體 service # -f 可以保持跟蹤,新的日志會馬上顯示在屏幕上 docker-compose logs
參考資料
curl 的用法指南
【編程不良人】Docker容器技術(shù)&Docker-Compose實戰(zhàn)