文章目錄
- 一、Docker Compose 簡介
- 1.1Docker Compose概述
- 1.2Docker Compose容器編排
- 1.3Docker Compose常用命令
- 1.4Docker Compose配置常用欄位
- 二、Consul簡介
- 2.1consul概述
- 2.2Consul容器服務更新與發現
- 三、部署Compose
- 3.1安裝docker、設定鏡像加速
- 3.2compose部署
- 四、consul部署
- 4.1consul服務器
- 4.2通過httpd api 獲取集群資訊
- 4.3容器服務自動加入consul集群
- 4.4安裝 consul-template
- 4.5配置并啟動 template
- 4.6測驗增加/洗掉節點
一、Docker Compose 簡介
1.1Docker Compose概述
- Docker Compose的前身是fig,他是一個定義及運行多個Docker容器的工具,使用Docker Compose不需要使用shell腳本來啟動容器;Docker Compose非常適合組合多個容器進行開發的場景
1.2Docker Compose容器編排
- YAML是一種標記語言直觀的資料序列化格式
- 檔案格式撰寫:
①不支持制表符tab鍵縮進,需要使用空格縮進
②通常開頭縮進2個空格
③字符后縮進1個空格,如冒號、逗號、橫桿
④用#號注釋
⑤如果包含特殊字符用單引號引起來
⑥布林值必須用引號括起來
1.3Docker Compose常用命令
build ##重新構建服務
ps ##列出容器
up ##創建和啟動容器
exec ##在容器里面執行命令
scale ##指定一個服務容器啟動數量
top ##顯示容器行程
logs ##查看容器輸出
down ##洗掉容器、網路、資料卷和鏡像
stop/start/restart ##停止/啟動/重啟服務
1.4Docker Compose配置常用欄位
build dockerfile context ##指定Dockerfile檔案名構建鏡像.背景關系路徑
image ##指定鏡像
command ##執行命令,覆寫默認命令
container name ##指定容器名稱,由于容器名稱是唯一的, 如果指定自定義名稱,則無法scale
deploy ##指定部署和運行服務相關配置,只能在Swarm模式使用
environment ##添加環境變數
networks ##加入網路
ports ##暴露容器埠,與-p相同,但埠不能低于60
volumes ##掛載宿主機路徑或命令卷
restart ##重啟策略,默認no,always, no-failure,unless-stoped
hostname ##容器主機名
二、Consul簡介
2.1consul概述
Consul是HashiCorp公司推出的開源工具, 用于實作分布式系統的服務發現與配置
Consul的特性:
①支持健康檢查,允許存盤鍵值對
②基于Golong語言,可移植性強
③支持ACL訪問控制
同時可與Docker等輕量級容器可無縫配合
2.2Consul容器服務更新與發現
- consul服務端:
①consul template:通過變數定義模板;定義的內容就是upstream地址池,通過變數的形式,并在接收到指令的時候動態更新web_01中ng的組態檔
②consul server:管理consul template
③consul agent:獲取服務發現的機制;UI界面也可以看到新更新的服務 - compose:
①consul registrator:監聽;部署在server端上 - 程序:
設定registrator監控,監聽服務埠,有新的埠監控會注冊到agent,交給server端,把后端真實的容器和ip寫入template模板內,模板更新到nginx.conf內,再多載組態檔,從而對外識別新加的服務后端的節點:docker服務器
三、部署Compose
實驗:
192.168.27.137 docker concul agent/server/template nginx手工編譯安裝
192.168.27.139 docker nginx httpd
3.1安裝docker、設定鏡像加速
參考走進docker世界博文
3.2compose部署
- 下載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
或者
上傳docker_compose即可
chmod +x docker-compose ##加執行權限
cp -p docker-compose /usr/local/bin
mkdir /root/compose_nginx
cd compose_nginx/
mkdir nginx wwwroot
- 撰寫nginx的Dockerfile檔案
cd nginx
上傳nginx-1.12.2.tar.gz壓縮包
vim Dockerfile ##撰寫檔案
FROM centos:7
ADD nginx-1.12.2.tar.gz /mnt
WORKDIR /mnt/nginx-1.12.2
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.12.2
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
cd wwwroot
vim index.html ##創建nginx頁面
happy
- 撰寫Docker-compose.yml檔案
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@consul compose_nginx]# docker-compose -f docker-compose.yml up -d ##基于yml檔案運行啟動
[root@consul compose_nginx]# docker-compose ps ##使用Compose容器編排
[root@consul compose_nginx]# tree ./
./
├── docker-compose.yml //創建模板腳本
├── nginx
├── Dockerfile //創建容器腳本
├── nginx-1.15.9.tar.gz //復制原始碼包
└── wwwroot
└── index.html //站點
- 驗證:192.168.27.137:1216

四、consul部署
實驗:
192.168.27.137 Docker-ce、 Compose 3、Consul、 Consul-template
192.168.27.139 Docker-ce、registrator
template 模更新
registrator 自動發現
registrator 控制consul 完成更新操作
consul template模板 進行熱更新
consul 自動發現、自動更新,為容器提供服務(添加、洗掉、生命周期)
4.1consul服務器
mkdir consul
cd consul
上傳consul_0.9.2_linux_amd64.zip壓縮包
unzip consul_0.9.2_linux_amd64.zip ##解壓
mv consul /usr/local/bin/
consul agent \
-server \ 服務端
-bootstrap \ 前端框架
-ui \ 可被訪問的web界面
-data-dir=/var/lib/consul-data \
-bind=192.168.27.137 \
-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.226.130:8301 alive server 0.9.2 2 dc1
[root@web consul]# consul info | grep leader
leader = true
leader_addr = 192.168.27.137:8300
4.2通過httpd api 獲取集群資訊
curl 127.0.0.1:8500/v1/status/peers //查看集群server成員
curl 127.0.0.1:8500/v1/status/leader //集群 Raf leader
curl 127.0.0.1:8500/v1/catalog/services //注冊的所有服務
curl 127.0.0.1:8500/v1/catalog/nginx //查看 nginx 服務資訊
[root@consul consul]# curl 127.0.0.1:8500/v1/catalog/nodes //集群節點詳細資訊
[{"ID":"ac1937e8-8f21-bbc0-61d6-0a24ea946cee","Node":"consul-server01","Address":"192.168.27.137","Datacenter":"dc1","TaggedAddresses":{"lan":"192.168.27.137","wan":"192.168.27.137"},"Meta":{},"CreateIndex":5,"ModifyIndex":6}]
4.3容器服務自動加入consul集群
- 安裝 Gliderlabs/Registrator(在192.168.27.139節點上)
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.27.139 \
consul://192.168.27.137:8500
- 測驗服務發現功能是否正常
docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:84:80 --name test-02 -h test02 nginx
docker run -itd -p:88:80 --name test-03 -h test03 httpd
docker run -itd -p:89:80 --name test-04 -h test04 httpd
- 驗證 http 和 nginx 服務是否注冊到 consul
瀏覽器輸入 http://192.168.27.137:8500,“單擊 NODES”,然后單擊 “consurl-server01”,會出現 5 個服務


- 在consul服務器上查看
[root@consul consul]# curl 127.0.0.1:8500/v1/catalog/services
{"consul":[],"httpd":[],"nginx":[]}
4.4安裝 consul-template
- 準備 template nginx 模板檔案
在consul上操作
vim /root/consul/nginx.ctmpl ##c:concul;tmp:template
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}}; #此處參考的變數會指向后端的地址和埠(動態變化)
{{end}}
}
server {
listen 83; ##ngixn的監聽埠
server_name localhost 192.168.35.40; #反向代理的IP地址(前端展示的NG服務的IP)
access_log /var/log/nginx/klj.cn-access.log;
index index.html index.php;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr; #后端真實IP
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #轉發地址
proxy_pass http://http_backend;
}
}
- 編譯安裝nginx
上傳壓縮包nginx-1.12.2.tar.gz
yum install gcc pcre-devel zlib-devel -y
tar zxvf nginx-1.12.2.tar.gz -C /opt
cd nginx-1.12.2
./configure --prefix=/usr/local/nginx
make && make install
- 配置 nginx
vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types; #默認存在的
include vhost/*.conf; ##添加虛擬主機目錄為了讓那個識別vhost/*.conf的檔案(consul動態生成的組態檔就會放在這里)
default_type application/octet-stream;
mkdir /usr/local/nginx/conf/vhost ##創建虛擬主機目錄
mkdir /var/log/nginx ##創建日志檔案目錄
ln -s /usr/local/nginx/sbin/nginx /usr/sbin
nginx ##啟動nginx

4.5配置并啟動 template
- 上傳檔案并解壓
上傳 consul-template_0.19.3_linux_amd64.zip 包到/root 目錄下
cp consul-template_0.19.3_linux_amd64.zip /root/
unzip consul-template_0.19.3_linux_amd64.zip ##解壓
mv consul-template /usr/bin/
- 關聯nginx 虛擬目錄中的子組態檔操作
consul-template -consul-addr 192.168.27.137:8500 \
-template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/klj.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info ##日志級別:info
[root@consul ~]# cat /usr/local/nginx/conf/vhost/klj.conf ##另外打開一個終端查看生成組態檔
upstream http_backend {
server 192.168.27.139:84;
server 192.168.27.139:85;
}
server {
listen 83; server_name localhost 192.168.27.137;
access_log /var/log/nginx/klj.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-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://http_backend;
}
}
4.6測驗增加/洗掉節點
- 增加一個nginx容器節點
增加一個 nginx 容器節點,測驗服務發現及配置更新功能
//在registrator服務端注冊
[root@docker bin]# docker run -itd -p:86:80 --name test-06 -h test06 nginx
74d1a35d21e907dc58ba6cb0b258e26f4c56fec4f1da495b76d84907c0f0ad43
- 洗掉一個nginx容器節點
[root@docker bin]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
74d1a35d21e9 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:86->80/tcp, :::86->80/tcp test-06
688c5c1083f5 nginx "/docker-entrypoint.…" 22 hours ago Exited (255) 19 minutes ago 0.0.0.0:85->80/tcp, :::85->80/tcp test-05
107aa62fb5aa httpd "httpd-foreground" 24 hours ago Exited (255) 19 minutes ago 0.0.0.0:89->80/tcp, :::89->80/tcp test-04
6aeb8cbb2050 httpd "httpd-foreground" 24 hours ago Exited (255) 19 minutes ago 0.0.0.0:88->80/tcp, :::88->80/tcp test-03
b1e96f6388ec nginx "/docker-entrypoint.…" 24 hours ago Exited (255) 19 minutes ago 0.0.0.0:84->80/tcp, :::84->80/tcp test-02
403bf203b9e6 gliderlabs/registrator:latest "/bin/registrator -i…" 24 hours ago Up 5 minutes registrator
[root@docker bin]# docker rm -f 74d1a35d21e9 ##洗掉86埠的服務器
74d1a35d21e9

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/299954.html
標籤:其他
下一篇:Nginx 服務器
