Docker容器compose容器集群的快速編排方式
引言
Dockerfile可以讓用戶管理一個單獨的應用容器,而Compose則允許用戶在一個模板(YAML)中定義一組相關聯(lián)的應用容器(被稱為一個project,即項目),例如一個Web服務器加上后端的數(shù)據(jù)庫服務容器等。
一、Docker-compose簡介
Docker-compose項目是基于Python開發(fā)的Docker官方開源項目,負責實現(xiàn)對Docker容器集群的快速編排
Docker-compose將所管理的容器分為三層,分別是工程(project),服務(service)以及容器(container)。
- Docker-Compose運行目錄下的所有文件(docker-compose.yml,extends文件或環(huán)境變量文件等)組成一個工程,若無特殊指定工程名即為當前目錄名。
- 一個工程當中可包含多個服務,每個服務中定義了容器運行的鏡像、參數(shù)、依賴。
- 一個服務當中可括多個容器實例,Docker-compose并沒有解決負載均衡的問題,因此需要借助其他工具實現(xiàn)服務發(fā)現(xiàn)及負載均衡,比如Consul
Docker-Compose的工程配置文件默認為docker-compose.yml,可通過環(huán)境變量COMPOSE_FILE或-f參數(shù)自定義配置文件,其定義了多個有依賴關系的服務及每個服務運行的容器。
使用一個Dockerfile模板文件,可以讓用戶很方便的定義一個單獨的應用容器。在工作中,經(jīng)常會碰到需要多個容器相互配合來完成某項任務的情況。例如要實現(xiàn)一個Web項目,除了Web服務容器本身,往往還需要再加上后端的數(shù)據(jù)庫服務容器,甚至還包括負載均衡容器等。
Compose允許用戶通過一個單獨的docker-compose.yml模板文件(YAML 格式)來定義一組相關聯(lián)的應用容器為一個項目(project)。
Docker-Compose項目由Python編寫,調(diào)用Docker服務提供的API來對容器進行管理。因此,只要所操作的平臺支持Docker API, 就可以在其上利用Compose來進行編排管理。
二、YAML文件格式及編寫注意事項
1.YAML文件格式
- YAML 是一種標記語言,它可以很直觀的展示數(shù)據(jù)序列化格式,可讀性高。
- 類似于 json數(shù)據(jù)描述語言,語法比 json簡單的很多。
- YAML 數(shù)據(jù)結(jié)構通過縮進來表示,連續(xù)的項目通過減號來表示,鍵值對用冒號分隔,數(shù)組用中括號 [ ] 括起來, hash 用花括號 { }括起來。
2.YAML格式的注意事項
- 不支持制表符 tab 鍵縮進,只能使用空格縮進
- 通常開頭縮進2個空格
- 字符后縮進1個空格,如冒號 : 、逗號 , 、橫杠 -
- 用 # 號注釋
- 如果包含特殊字符用單引號 ‘’ 引起來作為普通字符;如果用雙引號“”表示特殊字符本身的意思
- 布爾值必須用引號 “” 括起來
- 區(qū)分大小寫
3.YAML數(shù)據(jù)結(jié)構
對象: 鍵值對的字典 animal: pets 數(shù)組: 一組按次序排列的列表 - cat - dog - goldfish 布爾值 debug: "true" debug: "false" #Yaml示例 languages: #序列的映射 - Java - Golang - Python websites: #映射的映射 Baidu: www.baidu.com Wangyi: www.163.com Souhu: www.souhu.com #或者 languages: ["Java","Golong","Python"] websites: Baidu: www.baidu.com Wangyi: www.163.com Souhu: www.souhu.com #Json格式 { languages: [ 'Java', 'Golong', 'Python', ], websites: [ Baidu: 'www.baidu.com', Wangyi: 'www.163.com', Souhu: 'www.souhu.com', ] }
三、Docker Compose配置常用字段
字段 | 描述 |
build | 指定Dockerfile文件名(要指定的Dockerfile文件需要在build標簽的子級標簽中用dockerfile標簽指定) |
dockerfile | 構建鏡像上下文路徑 |
context | 可以是dockerfile路徑,或者是執(zhí)行git 倉庫的url地址 |
image | 指定鏡像(已存在) |
command | 執(zhí)行命令,會覆蓋容器啟動后默認執(zhí)行的命令(會覆蓋Dockerfile的CMD指令) |
container_name | 指定容器名稱,由于容器名稱是唯一的,如果指定自定義名稱,則無法scale指定容器數(shù)量 |
deploy | 指定部署和運行服務相關配置,只能在Swarm模式使用 |
environment | 添加環(huán)境變量 |
networks | 加入網(wǎng)絡,引用頂級networks下條目 |
network-mode | 設置容器的網(wǎng)絡模式 |
ports | 暴露容器端口,與-p 相同,但是端口不能低于60 |
volumes | 掛載一個宿主機目錄或命令卷到容器,命名卷要在頂級volumes 定義卷名稱 |
volumes_from | 從另一個服務或容器掛載卷,可選參數(shù) :ro 和 :rw,(僅版本‘2’支持) |
hostname | hostname |
hostname | 在容器內(nèi)設置內(nèi)核參數(shù) |
links | 連接到另一個容器,- 服務名稱[ : ] |
privileged | 用來給容器root權限,注意是不安全的,true |
restart | 重啟策略,定義是否重啟容器;1.no,默認策略,在容器退出時不重啟容器。2.on-failure,在容器非正常退出時(退出狀態(tài)非0),才會重啟容器。3.on-failure:3,在容器非正常退出時重啟容器,最多重啟3次。4.always,在容器退出時總是重啟容器。5.unless-stopped,在容器退出時總是重啟容器,但是不考慮在Docker守護進程啟動時就已經(jīng)停止了的容器。 |
depends_on | 此標簽用于解決容器的依賴,啟動先后問題。如啟動應用容器,需要先啟動數(shù)據(jù)庫容器php:depends_on:- apache- mysql |
四、Docker-compose常用命令
字段 | 描述 |
---|---|
build | 重新構建服務 |
ps | 列出容器 |
up | 創(chuàng)建和啟動容器 |
exec | 在容器里面執(zhí)行命令 |
scale | 指定一個服務容器啟動數(shù)量 |
top | 顯示正在運行的容器進程 |
logs | 查看服務容器的輸出 |
down | 刪除容器、網(wǎng)絡、數(shù)據(jù)卷和鏡像 |
stop/start/restart | 停止/啟動/重啟服務 |
五、compose部署
Docker-Compose 是 Docker 的獨立產(chǎn)品,因此需要安裝 Docker 之后在單獨安裝 Docker Compose。
//環(huán)境部署所有主機安裝docker環(huán)境(內(nèi)容為docker基礎) yum install docker-ce -y //下載compose(上傳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 cp -p docker-compose /usr/local/bin/ chmod +x /usr/local/bin/docker-compose mkdir /root/compose_nginx yum install -y tree vim /root/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:
[root@docker /]# mkdir /opt/compose_nginx [root@docker /]# vim /opt/compose_nginx/docker-compose.yml [root@docker /]# vim /opt/compose_nginx/docker-compose.yml [root@docker /]# cd /opt/compose_nginx/ [root@docker compose_nginx]# ls docker-compose.yml [root@docker compose_nginx]# mkdir nginx [root@docker compose_nginx]# mkdir wwwroot [root@docker compose_nginx]# ls docker-compose.yml nginx wwwroot [root@docker compose_nginx]# echo "i am superman" > wwwroot/index.html [root@docker compose_nginx]# cat wwwroot/index.html i am superman [root@docker compose_nginx]# cd nginx [root@docker nginx]# ls nginx-1.22.0.tar.gz [root@docker nginx]#
[root@docker nginx]# vim Dockerfile FROM centos:7 as build ADD nginx-1.22.0.tar.gz /mnt WORKDIR /mnt/nginx-1.22.0 RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && \ yum clean all && \ sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && \ ./configure --prefix=/usr/local/nginx &> /dev/null && \ make &>/dev/null && \ make install &>/dev/null && \ rm -rf /mnt/nginx-1.22.0 FROM centos:7 EXPOSE 80 VOLUME ["/usr/local/nginx/html"] COPY --from=build /usr/local/nginx /usr/local/nginx CMD ["/usr/local/nginx/sbin/nginx","daemon off;"]
[root@docker compose_nginx]# tree ./ ./ ├── docker-compose.yml ├── nginx │ ├── dockerfile │ └── nginx-1.22.0.tar.gz └── wwwroot └── index.html 2 directories, 4 files
docker-compose -f docker-compose.yml up -d docker network ls
六、總結(jié)
- Docker-Compose的工程配置文件默認為docker-compose.yml
- 使用一個Dockerfile模板文件,可以讓用戶很方便的定義一個單獨的應用容器。
- Compose允許用戶通過一個單獨的docker-compose.yml模板文件(YAML 格式)來定義一組相關聯(lián)的應用容器為一個項目(project)。
docker-compose分三層:project,service,container
- project:代表多個service組成的項目,默認是用工作目錄的名稱作為project的工程名稱
- service:一個 service 可以包含一個或多個容器,在里面可以定義網(wǎng)絡模式端口鏡像數(shù)據(jù)卷等參數(shù)
- container:可以直接由一個已存在的鏡像運行實現(xiàn),也可以通過dockerfile構建鏡像實現(xiàn)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
三分鐘完成 ubuntu16.04初始化,Java,maven,docker環(huán)境的部署問題
這篇文章主要介紹了三分鐘完成 ubuntu16.04初始化,Java,maven,docker環(huán)境的部署問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-11-11Armbian5.9.0安裝docker及部署可視化portainer的詳細教程
這篇文章主要介紹了Armbian5.9.0安裝docker及部署可視化portainer的詳細教程,通過?ssh?進去?Armbian?系統(tǒng)后,輸入相應代碼,按提示輸入y,等待安裝完成即可,需要的朋友可以參考下2022-05-05利用寶塔面板和docker快速部署網(wǎng)站的基本流程
當你有了一臺服務器,就會折騰往這臺服務器上部署各種好玩的網(wǎng)站,本文將以部署filebrowser舉例介紹網(wǎng)站部署的基本流程,感興趣的朋友一起看看吧2023-12-12skywalking容器化部署docker鏡像構建k8s從測試到可用
這篇文章主要為大家介紹了skywalking容器化部署docker鏡像構建k8s從測試到可用的構建部署過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-03-03