Docker-compose
- 一、概述
- 二、YAML檔案格式及撰寫注意事項
- 三、Docker Compose配置常用欄位
- 四、Docker Compose命令
- 格式
- 常用命令
- 五、Docker Compose 檔案結構
- 六、部署compose
- 1.Docker Compose 環境安裝
- 2.準備依賴檔案
- 3.創建dockerfile檔案
- 4.撰寫組態檔docker-compose.yml
- 5.驗證
一、概述
Docker-Compose專案是Docker官方的開源專案,負責實作對Docker容器集群的快速編排,
Docker-Compose將所管理的容器分為三層,分別是工程(project),服務(service)以及容器(container),
Docker-Compose運行目錄下的所有檔案(docker-compose.yml,extends檔案或環境變數檔案等)組成一個工程,若無特殊指定工程名即為當前目錄名,一個工程當中可包含多個服務,每個服務中定義了容器運行的鏡像、引數、依賴,一個服務當中可包括多個容器實體,Docker-Compose并沒有解決負載均衡的問題,因此需要借助其它工具實作服務發現及負載均衡,比如 Consul,
Docker-Compose的工程組態檔默認為docker-compose.yml,可通過環境變數COMPOSE_FILE或-f引數自定義組態檔,其定義了多個有依賴關系的服務及每個服務運行的容器,
使用一個Dockerfile模板檔案,可以讓用戶很方便的定義一個單獨的應用容器,在作業中,經常會碰到需要多個容器相互配合來完成某項任務的情況,例如要實作一個Web專案,除了Web服務容器本身,往往還需要再加上后端的資料庫服務容器,甚至還包括負載均衡容器等,
Compose允許用戶通過一個單獨的docker-compose.yml模板檔案(YAML 格式)來定義一組相關聯的應用容器為一個專案(project),
Docker-Compose專案由Python撰寫,呼叫Docker服務提供的API來對容器進行管理,因此,只要所操作的平臺支持Docker API, 就可以在其上利用Compose來進行編排管理,
二、YAML檔案格式及撰寫注意事項
YAML 是一種標記語言,它可以很直觀的展示資料序列化格式,可讀性高,類似于 XML資料描述語言,語法比 XML 簡單的很多,YAML 資料結構通過縮進來表示,連續的專案通過減號來表示,鍵值對用冒號分隔,陣列用中括號 [] 括起來, hash 用花括號 {} 括起來,
使用 YAML 時需要注意下面事項:
(1)不支持制表符 tab 鍵縮進,需要使用空格縮進
(2)通常開頭縮進2個空格
(3)字符后縮進1個空格,如冒號 : 、逗號 , 、橫杠 -
(4)用 # 號注釋
(5)如果包含特殊字符用單引號 ‘’ 引起來
(6)布林值必須用引號 " " 括起來
三、Docker Compose配置常用欄位
(1)build :指定 Dockerfile 檔案名(要指定Dockerfile檔案需要在build標簽的子級標簽中使用dockerfile標簽指定)
(2)dockerfile :構建鏡像背景關系路徑
(3)context :可以是 dockerfile 的路徑,或者是指向 git 倉庫的 url 地址
(4)image :指定鏡像
(5)command :執行命令,覆寫默認命令
(6)container name :指定容器名稱,由于容器名稱是唯一的,如果指定自定義名稱,則無法 scale
(7)deploy :指定部署和運行服務相關配置,只能在 Swarm 模式使用
(8)environment :添加環境變數
(9)networks :加入網路
(10)ports :暴露容器埠,與 -p 相同,但埠不能低于 60
(11)volumes :掛載宿主機路徑或命令卷
(12)hostname :容器主機名
(13)restart :重啟策略,默認 no,always,no-failure,unless-stoped
注:
no,默認策略,在容器退出時不重啟容器,
on-failure,在容器非正常退出時(退出狀態非0),才會重啟容器,
on-failure:3,在容器非正常退出時重啟容器,最多重啟3次,
always,在容器退出時總是重啟容器,
unless-stopped,在容器退出時總是重啟容器,但是不考慮在 Docker 守護行程啟動時就已經停止了的容器,
四、Docker Compose命令
格式
docker-compose -f docker-compose.yml up -d
注釋
-f, --file FILE :使用特定的 compose 模板檔案,默認為 docker-compose.yml
-p, --project-name NAME :指定專案名稱,默認使用目錄名稱
-d :在后臺運行
常用命令
| 欄位 | 說明 |
|---|---|
| build | 重新構建服務 |
| ps | 列出容器 |
| up | 創建和啟動容器 |
| exec | 在容器里面執行命令 |
| scale | 指定一個服務容器啟動數量 |
| top | 顯示容器行程 |
| logs | 查看容器輸出 |
| down | 洗掉容器、網路、資料卷和鏡像 |
| stop/start/restart | 停止/啟動/重啟服務 |
五、Docker Compose 檔案結構
yum install -y tree
tree /opt/compose_nginx
/opt/compose_nginx/
├── docker-compose.yml #創建模板腳本
├── nginx
│?? ├── Dockerfile #創建容器腳本
│?? ├── nginx-1.12.0.tar.gz #復制原始碼包
│?? └── run.sh #啟動服務腳本
└── wwwroot
└── index.html #站點網頁
六、部署compose
1.Docker Compose 環境安裝
Docker Compose 是 Docker 的獨立產品,因此需要安裝 Docker 之后在單獨安裝 Docker Compose
#第一種方法,直接下載
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
#第二種方法,有安裝包
cd /opt
上傳壓縮包
chmod +x docker-compose
mv docker-compose /usr/local/bin
#查看版本
docker-compose --version

2.準備依賴檔案
mkdir -p /opt/compose_nginx/nginx
cd /opt/compose_nginx/
ls
mkdir wwwroot
ls
echo "this is test web" > /opt/compose_nginx/wwwroot/index.html

3.創建dockerfile檔案
vim Dockerfile
#基于基礎鏡像
FROM centos:7
#用戶資訊
MAINTAINER this is nginx image <zz>
#添加環境包
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#上傳nginx軟體壓縮包,并解壓
ADD nginx-1.12.0.tar.gz /usr/local/src/
#指定作業目錄
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#指定http和https埠
EXPOSE 80
EXPOSE 443
//方法一:
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf #關閉 nginx 在后臺運行
#添加宿主機中run.sh到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
要先創建
vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
//方法二:
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]

4.撰寫組態檔docker-compose.yml
vim /opt/compose_nginx/docker-compose.yml
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 1216:80
- 1217:443
networks:
- lnmp
volumes:
- ./wwwroot:/usr/local/nginx/html
networks:
lnmp:
cd /opt/compose_nginx/
docker-compose -f docker-compose.yml up -d
docker ps -a
cd /opt/compose_nginx/
docker-compose ps #必須在docker-compose.yml所在目錄執行此命令

5.驗證
瀏覽器訪問:http://192.168.19.77:1216

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291597.html
標籤:其他
