一、Compose consul的概述
1、Compose是什麼?
Docker Compose的前身是fig,他是一個定義及運作多個Docker容器的工具,使用Docker Compose不需要使用shell腳本來啟動容器;Docker Compose非常适合組合多個容器進行開發的場景
2、Docker Compose容器編排
YAML是一種标記語言很直覺的資料序列化格式
檔案格式及編寫注意事項:
不支援制表符tab鍵縮進,需要使用空格縮進
通常開頭縮進2個空格
字元後縮進1個空格,如冒号、逗号、橫杆
用#号注釋
如果包含特殊字元用單引号弓|起來
布爾值必須用引号括起來
3、Docker 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 容器主機名
4、Docker Compose 常用指令
字段 描述
build 重新建構服務
ps 列出容器
up 建立和啟動容器
exec 在容器裡面執行指令
scale 指定一個服務容器啟動數量
top 顯示容器程序
logs 檢視容器輸出
down 删除容器、網絡、資料卷和鏡像
stop/start/restart 停止/啟動/重新開機服務
compose部署
1、下載下傳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
2、編寫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;"]
3、編寫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:
[[email protected] compose_nginx]# docker-compose -f docker-compose.yml up -d ##基于yml檔案運作啟動
[[email protected] compose_nginx]# docker-compose ps ##使用Compose容器編排
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGLwIzXlpXazxydXxkNBlnY1cUaZVzTDpVNI1CT2gXcvVTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwIWMyMGNhNWZhZWM5kjYihzNzQzMjRTNwEWYkVjNhJzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
docker 基礎操作/正常操作
1、image 容器的管理指令
2、dockerfile
3、docker 網絡
4、docker 私有倉庫
registry
harbor
consul部署
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.35.40 \
-client=0.0.0.0 \
[[email protected] consul]# consul members ##檢視叢集資訊
Node Address Status Type Build Protocol DC
consul-server01 192.168.235.156:8301 alive server 0.9.2 2 dc1
[[email protected] consul]# consul info | grep leader
leader = true
leader_addr = 192.168.235.156:8300
通過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 服務資訊
[[email protected] consul]# curl 127.0.0.1:8500/v1/catalog/nodes //叢集節點詳細資訊
[{"ID":"ac1937e8-8f21-bbc0-61d6-0a24ea946cee","Node":"consul-server01","Address":"192.168.235.156","Datacenter":"dc1","TaggedAddresses":{"lan":"192.168.235.157","wan":"192.168.235.157"},"Meta":{},"CreateIndex":5,"ModifyIndex":6}]
容器服務自動加入consul叢集
1、安裝Gliderlabs/Registrator
目前支援consul、etcd和skydns2
在192.168.235.157節點,執行以下操作
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.235.157 \
consul://192.168.235.156:8500
2、測試服務發現功能是否正常
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
4、準備template nginx 模闆檔案
(1)在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.235.157; #反向代理的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;
}
}
(2)編譯安裝
上傳壓縮包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
(3)配置 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
6、配置并啟動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.235.156:8500 \
-template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/klj.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info ##日志級别:info
另外打開一個終端檢視生成配置檔案
[[email protected] ~]# cat /usr/local/nginx/conf/vhost/klj.conf
upstream http_backend {
server 192.168.235.157:84;
server 192.168.235.157:85;
}
server {
listen 83; server_name localhost 192.168.235.156;
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;
}
}
增加一個nginx容器節點
[[email protected] bin]# docker run -itd -p:86:80 --name test-06 -h test06 nginx
74d1a35d21e907dc58ba6cb0b258e26f4c56fec4f1da495b76d84907c0f0ad43