前言
?上兩篇文章都是再玩兒Dockerfile,主要是基于Dockerfile構(gòu)建各種服務(wù)鏡像。而本文將介紹及演示docker的自動(dòng)編排工具——docker compose的概念和使用。
- 揭開Docker的面紗 – 基礎(chǔ)理論梳理和安裝流程演示 http://www.sfodin.cn/Linux/2020-04/163003.htm
- Docker基礎(chǔ)命令詳解 – 鏡像及容器操作 http://www.sfodin.cn/Linux/2020-04/163005.htm
- 深入理解Docker的硬件資源控制與驗(yàn)證 http://www.sfodin.cn/Linux/2020-04/163006.htm
- Docker網(wǎng)絡(luò)模式與配置Docker自定義網(wǎng)絡(luò)(bridge模式) http://www.sfodin.cn/Linux/2020-04/163007.htm
- Docker構(gòu)建鏡像的三種方式(Dockerfile初步) http://www.sfodin.cn/Linux/2020-04/163008.htm
- 教你如何搭建Docker私有倉庫 http://www.sfodin.cn/Linux/2020-04/163009.htm
- 深入理解Docker數(shù)據(jù)管理與端口映射 http://www.sfodin.cn/Linux/2020-04/163010.htm
- Dockerfile與Dockerfile實(shí)戰(zhàn) http://www.sfodin.cn/Linux/2020-04/163011.htm
- Dockerfile與Dockerfile實(shí)戰(zhàn) http://www.sfodin.cn/Linux/2020-04/163011.htm
什么是docker compose?
?先前我們在使用Dockerfile構(gòu)建鏡像時(shí),在編寫好Dockerfile文件以及其他必要文件后,需要使用docker build 、docker run 等命令操作{創(chuàng)建,啟動(dòng),停止等}容器。然而,在微服務(wù)架構(gòu)體系中,一個(gè)應(yīng)用系統(tǒng)一般包含若干個(gè)服務(wù)器,每個(gè)微服務(wù)通常都會(huì)部署多個(gè)實(shí)例,如果每個(gè)服務(wù)都要手動(dòng)啟停,那么這樣效率太低了,而且維護(hù)也非常不方便。
?因此,便有了docker compose,它可以輕松、高效地管理容器,是一個(gè)用于定義和運(yùn)行多容器docker的應(yīng)用程序工具。
下面結(jié)合實(shí)際例子來使用以下docker compose工具吧,之后會(huì)給出編排文件常用的字段介紹以及docker-compose的相關(guān)命令介紹。
基于docker compose工具構(gòu)建nginx容器服務(wù)
首先,我們需要?jiǎng)?chuàng)建一個(gè)目錄,其中需要包含一個(gè)構(gòu)建Dockerfile的nginx目錄,首頁頁面測試目錄以及docker-compose.yml文件
所以,一方面我們需要docker安裝環(huán)境,也需要安裝docker compose工具;
再者,依舊是需要編寫nginx服務(wù)的Dockerfile和運(yùn)行腳本,結(jié)合指定的頁面目錄來進(jìn)行測試驗(yàn)證;
接下來,編寫yml格式的docker-compose.yml文件,并且執(zhí)行對應(yīng)的命令。
下面是這個(gè)案例的目錄結(jié)構(gòu)
[root@localhost opt]# tree compose_nginx/ compose_nginx/ ├── docker-compose.yml ├── nginx │?? ├── Dockerfile │?? └── nginx.sh └── wwwroot └── index.html 2 directories, 4 files
Dockerfile以及對應(yīng)的文件都無需更改,我們需要做的就是編寫一個(gè)首頁頁面
[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:具體的服務(wù) nginx:服務(wù)名稱 hostname:容器主機(jī)名稱 build:創(chuàng)建 context:提供資源和素材提供的目錄,用來創(chuàng)建容器的路徑 dockerfile:Dockerfile文件 ports:提供的端口,相當(dāng)于執(zhí)行docker run -p的設(shè)置 networks:網(wǎng)絡(luò)名稱,如果是群集那么這個(gè)名稱設(shè)置需要一致(同一個(gè)網(wǎng)絡(luò)環(huán)境) volumes:數(shù)據(jù)卷,本次案例是提供首頁頁面 networks:services的子選項(xiàng)針對外公開的網(wǎng)絡(luò)名稱
啟動(dòng)運(yùn)行
[root@localhost opt]# docker-compose -f compose_nginx/docker-compose.yml up -d #-f——指定文件 -d——后臺(tái) up——啟動(dòng) ....//第一次執(zhí)行過程比較久,顯示信息多,這里就省略了。
運(yùn)行的結(jié)果和一些解釋如下圖
如果重復(fù)執(zhí)行上述命令則會(huì)出現(xiàn)以下結(jié)果,因此這個(gè)WARNING是一個(gè)比較友好的提示哦!
[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
測試驗(yàn)證: