上兩篇文章都是再玩兒Dockerfile,主要是基於Dockerfile構建各類服務鏡像。而本文將介紹及演示docker的自動編排工具——docker compose的概念和使用。html
先前咱們在使用Dockerfile構建鏡像時,在編寫好Dockerfile文件以及其餘必要文件後,須要使用docker build 、docker run 等命令操做{建立,啓動,中止等}容器。然而,在微服務架構體系中,一個應用系統通常包含若干個服務器,每一個微服務一般都會部署多個實例,若是每一個服務都要手動啓停,那麼這樣效率過低了,並且維護也很是不方便。nginx
所以,便有了docker compose,它能夠輕鬆、高效地管理容器,是一個用於定義和運行多容器docker的應用程序工具。web
下面結合實際例子來使用如下docker compose工具吧,以後會給出編排文件經常使用的字段介紹以及docker-compose的相關命令介紹。docker
首先,咱們須要建立一個目錄,其中須要包含一個構建Dockerfile的nginx目錄,首頁頁面測試目錄以及docker-compose.yml文件shell
因此,一方面咱們須要docker安裝環境,也須要安裝docker compose工具;centos
再者,依舊是須要編寫nginx服務的Dockerfile和運行腳本,結合指定的頁面目錄來進行測試驗證;bash
接下來,編寫yml格式的docker-compose.yml文件,而且執行對應的命令。服務器
下面是這個案例的目錄結構網絡
[root@localhost opt]# tree compose_nginx/ compose_nginx/ ├── docker-compose.yml ├── nginx │?? ├── Dockerfile │?? └── nginx.sh └── wwwroot └── index.html 2 directories, 4 files
Dockerfile以及對應的文件都無需更改,咱們須要作的就是編寫一個首頁頁面架構
[root@localhost opt]# cat compose_nginx/wwwroot/index.html <h1>this is test web</h1>
接着編寫docke-compose.yml文件
[root@localhost opt]# cat compose_nginx/docker-compose.yml version: '3' services: nginx: hostname: nginx build: context: ./nginx dockerfile: Dockerfile ports: - 1216:80 - 1217:443 networks: - cluster volumes: - ./wwwroot:/usr/local/nginx/html networks: cluster:
docker-compose.yml文件解釋
version:聲明版本,目前是3 service:具體的服務 nginx:服務名稱 hostname:容器主機名稱 build:建立 context:提供資源和素材提供的目錄,用來建立容器的路徑 dockerfile:Dockerfile文件 ports:提供的端口,至關於執行docker run -p的設置 networks:網絡名稱,若是是羣集那麼這個名稱設置須要一致(同一個網絡環境) volumes:數據卷,本次案例是提供首頁頁面 networks:services的子選項針對外公開的網絡名稱
啓動運行
[root@localhost opt]# docker-compose -f compose_nginx/docker-compose.yml up -d #-f——指定文件 -d——後臺 up——啓動 ....//第一次執行過程比較久,顯示信息多,這裏就省略了。
運行的結果和一些解釋以下圖
若是重複執行上述命令則會出現如下結果,所以這個WARNING是一個比較友好的提示哦!
[root@localhost opt]# docker-compose -f compose_nginx/docker-compose.yml up -d compose_nginx_nginx_1 is up-to-date
查看鏡像和容器
[root@localhost opt]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE compose_nginx_nginx latest 67f9a64cc32d 5 minutes ago 587MB centos 7 5e35e350aded 5 months ago 203MB [root@localhost opt]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8f3d48d7c765 compose_nginx_nginx "/nginx.sh" 5 minutes ago Up 5 minutes 0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp compose_nginx_nginx_1
測試驗證: