共計 9686 個字符,預計需要花費 25 分鐘才能閱讀完成。
這篇文章給大家分享的是有關 Docker 容器中 Compose 編排、consul 集群、te 如何實現的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。
docker compose 容器編排
(1)docker compose 的前身 Fig,它是一個定義及運行多個 docker 容器的工具
(2)使用 docker compose 不再需要使用 shell 腳本啟動容器
(3)docker compose 非常適合組合使用多個容器進行開發的場景
YAML 是一種標記語言很直觀的數據序列化格式文件格式及編寫注意事項:
不支持制表符 tab 鍵縮進,需要使用空格縮進
通常開頭縮進 2 個空格
字符后縮進 1 個空格,如冒號,逗號,橫桿
用井號注釋
如果包含特殊字符用單引號引起來
布爾值必須用引號括起來
docker compose 配置常用字段字段描述 build dockerfile context 指定 Dockerfile 文件名構建鏡像上下文路徑 image 指定鏡像 command 執行命令,覆蓋默認命令 container name 指定容器名稱,由于容器名稱是唯一的,如果指定自定義名稱,則無法 scaledeploy 指定部署和運行服務相關配置,只能在 Swarm 模式使用 environment 添加環境變量 networks 加入網絡 ports 暴露容器端口,與 - p 相同,但端口不能低于 60volumes 掛載宿主機路徑或命令卷 restart 重啟策略,默認 no,always, no-failure,unless-stopedhostname 容器主機名 docker compose 常用命令字段描述 build 重新構建服務 ps 列出容器 up 創建和啟動容器 exec 在容器里面執行命令 scale 指定一個服務 容器啟動數量 top 顯示容器進程 logs 查看容器輸出 down 刪除容器、網絡、數據卷和鏡像 stop/start/restart 停止 / 啟動 / 重啟服務 compose 命令說明基本的使用格式
docker-compose [options] [COMMAND] [ARGS...]
docker-compose 選項
--verbose 輸出更多調試信息
--version 打印版本并退出
-f,--file FILE 使用特定的 compose 模板文件,默認為 docker-compose.yml
-p,--project-name NAME 指定項目名稱,默認使用目錄名稱
1、安裝 docker 容器和 compose 編排工具
[root@localhost ~]# yum install -y \
yum-utils \ ## 設置源工具
device-mapper-persistent-data \ ## 映射工具
lvm2 ## 映射工具
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
## 加載阿里云鏡像源
[root@localhost ~]# yum install docker-ce -y ## 安裝 docker 容器
[root@localhost ~]# systemctl stop firewalld.service ## 關閉防火墻
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start docker ## 開啟 docker 容器
[root@localhost ~]# systemctl enable docker ## 開機自啟動
[root@localhost ~]# ps aux | grep docker ## 查看 docker 進程是否開啟
[root@localhost ~]# tee /etc/docker/daemon.json - EOF ## 進行鏡像加速
{ registry-mirrors : [ https://3a8s9zx5.mirror.aliyuncs.com]
}
EOF
registry-mirrors : [https://3a8s9zx5.mirror.aliyuncs.com]
[root@localhost ~]# systemctl daemon-reload ## 重載守護進程
[root@localhost ~]# systemctl restart docker ## 重啟 docker 服務
[root@localhost ~]# mount.cifs //192.168.100.100/LNMP-C7 /mnt/
Password for root@//192.168.100.100/LNMP-C7:
[root@localhost ~]# cd /mnt/docker/
[root@localhost docker]# cp -p docker-compose /usr/bin/
## 將 docker-compose 復制到 /usr/bin/ 目錄下
[root@localhost docker]# docker-compose -v ## 查看版本信息
docker-compose version 1.21.1, build 5a3f1a3
2、創建 Nginx 編排實例
[root@localhost docker]# cd ~
[root@localhost ~]# mkdir compose-nginx ## 創建工作目錄
[root@localhost ~]# cd compose-nginx/
[root@localhost compose-nginx]# mkdir nginx ## 創建 Nginx 的目錄
[root@localhost compose-nginx]# cd nginx/
[root@localhost nginx]# vim run.sh ## 編輯啟動腳本
#!/bin/bash
/usr/local/nginx/sbin/nginx ## 啟動 Nginx 服務
[root@localhost nginx]# mkdir /abc
[root@localhost nginx]# mount.cifs //192.168.100.3/LNMP-C7 /abc/
Password for root@//192.168.100.3/LNMP-C7:
[root@localhost nginx]# cp /abc/nginx-1.12.2.tar.gz ./ ## 將 Nginx 的壓縮包復制到當前目錄下
[root@localhost nginx]# vim Dockerfile ## 編寫容器文件
FROM centos:7
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local/src
WORKDIR /usr/local/src
WORKDIR nginx-1.12.2
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
EXPOSE 80
EXPOSE 443
RUN echo daemon off; /usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD [/run.sh]
[root@localhost nginx]# cd ../
[root@localhost compose-nginx]# vim docker-compose.yml ## 創建 compose 模板腳本
version: 3 ## 版本
services: ## 服務
nginx:
hostname: nginx ## 容器主機名
build:
context: ./nginx ## 創建容器的文件路徑
dockerfile: Dockerfile
ports:
- 1216:80 ## 映射端口
- 1217:443
networks:
- abc ## 網絡名稱
volumes:
- ./wwwroot:/usr/local/nginx/html ## 數據卷關聯宿主站點目錄
networks: ## 對外申明網絡
abc:
[root@localhost compose-nginx]# docker-compose -f docker-compose.yml up -d
## 執行 compose 腳本開啟,- d 守護進程
[root@localhost compose-nginx]# cd wwwroot/
[root@localhost wwwroot]# vim index.html
this is test!!! ## 編輯首頁內容
[root@localhost wwwroot]# yum install tree -y
[root@localhost wwwroot]# tree ~ ## 查看整個所需的內容結構
/root
├── anaconda-ks.cfg
├── compose-nginx
│ ├── docker-compose.yml ## 編排模板
│ ├── nginx
│ │ ├── Dockerfile ## 容器腳本
│ │ ├── nginx-1.12.2.tar.gz ## 安裝包
│ │ └── run.sh ## 啟動服務腳本
│ └── wwwroot
│ └── index.html ## 網站首頁
3、用瀏覽器查看網頁
consul 概述 consul 是開源工具,用于實現分布式系統的服務發現與配置 consul 的特性:
(1)consul 支持健康檢查,允許存儲鍵值對(2)一致性協議采用 Raft 算法,用來保證服務的高可用(3)成員管理和消息廣播采用 GOSSIP 協議,支持 ACL 訪問控制
方便部署,與 docker 等輕量級容器可無縫配合建立 consul 服務
每個提供服務的節點上都要部署和運行 consul 和 agent
consul agent 有兩種運行模式:server,client
server 和 client 知識 consul 集群層面的區分,與搭建在 cluster 之上的應用服務無關
架構拓撲圖
實驗環境
consul 服務端 192.168.13.128 Docker-ce 、Compose 3、Consul、Consul-template
client 客戶節點 192.168.13.129 Docker-ce 、registrator
1、配置 consul 服務器
[root@consul ~]# mkdir consul
[root@consul ~]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/
Password for root@//192.168.100.3/LNMP-C7:
[root@consul ~]# cd /mnt/docker/
[root@consul docker]# cp consul_0.9.2_linux_amd64.zip /root/consul/
[root@consul docker]# cd /root/consul/
[root@consul consul]# unzip consul_0.9.2_linux_amd64.zip ## 解壓 consul
Archive: consul_0.9.2_linux_amd64.zip
inflating: consul
[root@consul consul]# mv consul /usr/bin/ ## 便于系統識別
[root@consul consul]# consul agent \ ## 代理
-server \ ## 提供 server
-bootstrap \
-ui \ ##web 訪問界面
-data-dir=/var/lib/consul-data \ ## 數據存儲目錄
-bind=192.168.13.128 \ ## 本地地址
-client=0.0.0.0 \ ## 所有節點
-node=consul-server01 /var/log/consul.log ## 指定本地節點名稱
[root@consul consul]# consul members ## 查看群集信息
Node Address Status Type Build Protocol DC
consul-server01 192.168.13.128:8301 alive server 0.9.2 2 dc1
[root@consul consul]# consul info | grep leader ## 查看 leader
leader = true
leader_addr = 192.168.13.128:8300
[root@consul consul]# systemctl stop firewalld.service ## 關閉防火墻
[root@consul consul]# setenforce 0
## 通過 httpd api 獲取集群信息
[root@localhost consul]# curl 127.0.0.1:8500/v1/status/peers ## 查看群集 server 成員
[root@localhost consul]# curl 127.0.0.1:8500/v1/status/leaders ## 群集中 Raf leader
[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/services ## 注冊的所有服務
[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/nodes ## 群集節點詳細信息
[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/nginx ## 查看 nginx 服務信息
2、配置 client 節點服務器
[root@client ~]# docker run -d \
--name=registrator \ ## 安裝 registrator 自動注冊功能
--net=host \ ## 指定網絡
-v /var/run/docker.sock:/tmp/docker.sock \ ## 指定數據卷
--restart=always \
gliderlabs/registrator:latest \ ## 鏡像
-ip=192.168.13.129 \ ## 本地地址
consul://192.168.13.128:8500 ##consul 服務器地址
3、在節點服務器上測試發現功能是否正常
[root@client ~]# docker run -itd -p 83:80 --name test-01 -h test01 nginx
[root@client ~]# docker run -itd -p 84:80 --name test-02 -h test02 nginx
[root@client ~]# docker run -itd -p 88:80 --name test-03 -h test03 httpd
[root@client ~]# docker run -itd -p 89:80 --name test-04 -h test04 httpd
[root@client ~]# systemctl stop firewalld.service ## 關閉防火墻
[root@client ~]# setenforce 0
4、驗證 http 和 Nginx 服務是否注冊到 consul
consul-template 概述
是基于 Consul 的自動替換配置文件的應用;
可以查詢 Consul 中的服務目錄:Key、Key-values 等;
特別適合動態的創建配置文件;
是一個守護進程,用于實時查詢 consul 集群信息;
1、在 consul 服務器上配置模板文件
[root@consul consul]# vim /root/consul/nginx.ctmpl
upstream http_backend { ## 申明后端服務器池
{{range service nginx}}
server {{.Address}}:{{.Port}};
{{end}}
server {
listen 1216; ## 代理端口
server_name localhost 192.168.13.128; ## 本地地址
access_log /var/log/nginx/kgc.cn-access.log;
index index.html index.php;
location / {
proxy_set_header HOST $host; ## 頭部信息
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Fprwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://http_backend; ## 跳轉后端服務器池
}
}
2、在 consul 服務器上安裝配置 Nginx
[root@consul consul]# cd /mnt/
[root@consul mnt]# tar zxvf nginx-1.12.2.tar.gz -C /opt/ ## 解壓 Nginx
[root@consul mnt]# cd /opt/nginx-1.12.2
[root@consul nginx-1.12.2]# yum install gcc gcc-c++ pcre-devel zlib-devel -y ## 安裝組件
[root@consul nginx-1.12.2]# ./configure --prefix=/usr/local/nginx ## 配置
[root@consul nginx-1.12.2]# make make install
[root@consul nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf ## 修改 Nginx 配置文件
17 http {
18 include mime.types;
19 include vhost/*.conf; ## 指定虛擬主機目錄
[root@consul nginx-1.12.2]# mkdir /usr/local/nginx/conf/vhost ## 創建虛擬主機目錄
[root@consul nginx-1.12.2]# mkdir /var/log/nginx ## 創建模板中日志文件目錄
[root@consul nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ ## 創建軟連接
[root@consul nginx-1.12.2]# nginx ## 開啟 Nginx 服務
[root@consul nginx-1.12.2]# netstat -natp | grep nginx
3、在 consul 服務器上配置并啟動 templeta
[root@consul nginx-1.12.2]# cd /mnt/docker/
[root@consul docker]# cp consul-template_0.19.3_linux_amd64.zip /root/
[root@consul docker]# cd /root/
[root@consul ~]# unzip consul-template_0.19.3_linux_amd64.zip ## 安裝 templeta
Archive: consul-template_0.19.3_linux_amd64.zip
inflating: consul-template
[root@consul ~]# mv consul-template /usr/bin
[root@consul ~]# consul-template -consul-addr 192.168.13.128:8500 \ ## 指定 consul 本地地址
-template /root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload \
## 指定 template 的路徑
--log-level=info ## 日志級別
[root@consul ~]# cd /usr/local/nginx/conf/vhost/
[root@consul vhost]# ls
kgc.conf ## 自動生成配置文件模板
upstream http_backend {
server 192.168.13.129:83; ## 自動生成后端容器服務地址及端口號
server 192.168.13.129:84;
server {
listen 1216;
server_name localhost 192.168.13.128;
access_log /var/log/nginx/kgc.cn-access.log;
index index.html index.php;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Fprwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://http_backend;
}
}
用瀏覽器查看
也可在后端節點服務器上通過 docker logs -f test-01 查看來訪地址為 128
4、在 client 端創建一個 nginx 容器節點,檢測服務發現及配置更新,不要關閉防火墻
[root@localhost ~]# docker run -itd -p:85:80 --name test-05 -h test05 nginx
## 繼續瀏覽器訪問 128 服務端
[root@client ~]# docker logs -f test-05
192.168.13.128 - - [09/Jan/2020:11:05:39 +0000]
## 輪詢訪問,還是 128 服務端訪問的節點,實現了負載均衡
感謝各位的閱讀!關于“Docker 容器中 Compose 編排、consul 集群、te 如何實現”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!