目录
前言:在部署docker-compose的前提是你的环境得有docker这个环境
下载docker-compose的地址
curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
一、docker-compose简介
- docker compose 的前身是Fig,它是一个定义及运行多个docker容器的工具
- 使用docker compose不需要再使用shell脚本来启动容器
- docker compose非常适合组合使用多个容器进行开发的场景
二、docker-compose文件结构
1、docker-compose.yml
2、yaml
2-1yaml语言的设计目标,就是方便人类读写,它实质上是种通用化的数据串行化格式
基本语法如下
- 不支持制表符tab键缩进,使用空格缩进
- 通常开头缩进2个空格
- 字符后缩进1个空格,如冒号、逗号、横杠
- 如果包含特殊字符用单引号引起来
- #表示注释
- 布尔值必须用引号括起来
2-2 支持的数据结构有三种 - 对象:键值对的集合,又称为映射/哈希/字典
- 数组:一组按次序排列的值,又称为序列/列表
- 纯量:单个的、不可再分的值
3、docker compose配置常用字段
4、docker compose常用命令
5、compose 命令说明
- 基本的使用格式
docker-compose [options] [COMMAND] [ARGS…]
- docker-compose选项
- –verbose 输出更多调试信息
- –version打印版本并退出
- -f,–file FILE使用特定的compose模板文件,默认为docker-compose.yml
- -p,–project-name NAME指定项目名称,默认使用目录名称
三、使用docker-compose构建nginx镜像
cd /opt
mkdir docker-compose-nginx
mv nginx ./docker-compose-nginx
vim docker-compose.yml
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 1111:80
- 2222:443
networks:
- cluster
volumes:
- ./wwwroot:/usr/local/nginx/html
networks:
cluster:
mkdir wwwroot
vim /wwwroot/index.html
<h1>this is test web</h1>
docker-compose -f docker-compose.yum up -d
四、Consul
1、简介
Consul是一个服务发现和注册的工具,其具有分布式,高扩展性能特点
2、Consul主要特点
- 支持健康检查,允许存储键值对
- 基于Golong语言,可移植性强
- 支持ACL访问控制
与docker等轻量级容器可无缝配合
3、docker consul 容器服务更新与发现
思路:
- 建立consul服务
- 每个提供服务的节点上都要部署和允许consul的agent
- consul agent有两个运行模式
- server
- client
- server和client只是consul群集层面的区分,与搭建在cluster之上的应用服务无关
4、部署
实验环境:
- 第一台centos7 IP地址:192.168.241.3
- 需求软件包:Docker-ce、Docker-Compose 、Consul、Consul-template、nginx-1.12.0.tar.gz
- 第二台centos7 IP地址:192.168.241.20
- 需求软件包:Docker-ce 、registrator
1、安装consul软件包(包已经在宿主机里下好了,直接共享过来使用)——consul服务器
- 需求软件包:Docker-ce 、registrator
mkdir /root/consul
mv consul_0.9.2_linux_amd64.zip /root/consul
cd /root/consul
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/bin
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.241.3 \ #consul服务器地址
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
2、查看集群信息
consul members
consul info | grep leader
3、通过http api 可以获取到群集信息
curl 127.0.0.1:8500/v1/status/peers ##查看群集server成员
curl 127.0.0.1:8500/v1/status/leaders #群集中 Raf leader
curl 127.0.0.1:8500/v1/catalog/services #注册的所有服务
curl 127.0.0.1:8500/v1/catalog/nodes #群集节点详细信息
curl 127.0.0.1:8500/v1/catalog/nginx #查看nginx 服务信息
4、容器服务自动加入群集
1)安装Gliderlabs/Registrator
Gliderlabs/Registrator可检查容器运行状态自动注册,还可注销docker容器的服务,到服务的配置文件中
目前支持consul 、 etcd和skyDNS2
在192.168.241.20节点执行以下操作
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.241.20 \
consul://192.168.241.3: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:99:80 --name test-03 -h test03 httpd
docker run -itd -p:88:80 --name test-04 -h test04 httpd
3)验证http和nginx服务是否注册到consul
浏览器输入http://192.168.241.3:8500,点击NODES,然后点击“consurl-server01”会出现5个服务
在consul服务器上查看
curl 127.0.0.1:8500/v1/catalog/services
5、安装consul-template
consul-template是一个守护进程,用于实时查询consul群集信息,并更新文件系统上任意数量的指定模板,生成配置文件,更新完成后可以选择运行shell命名执行更新操作,重新加载nginx。consul-template可以查询consul中的服务目录、key、key-values等
这种强大的抽象功能和查询语句模板可以使consul-template特别适合动态的创建配置文件
6、准备consul-template、nginx模板文件——在consul服务器上操作
vim /root/consul/nginx.ctmpl
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}
server {
listen 888;
server_name localhost 192.168.241.3;
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;
}
}
7、编译安装&配置nginx
yum install gcc gcc-c++ pcre-devel zlib-devel -y
cd /root/consul
上传nginx压缩包
tar zxvf nginx-1.12.0.tar.gz -C /opt
cd /opt/nginx-1.12.0
./configure --prefix=/usr/local/nginx
make && make install
8、修改nginx配置文件
cd /usr/local/nginx/conf
vim nginx.conf
#http模块下添加
http {
include mime.types;
include vhost/*.conf; #添加 并vhost目录需手动创建
mkdir vhost
mkdir /var/log/nginx
9、配置、启动Template
cd /root/consul
#上传consul-template_0.19.3_linux_amd64.zip
unzip consul-template_0.19.3_linux_amd64.zip
mv consul-template /usr/bin
/usr/local/nginx/sbin/nginx
consul-template -consul-addr 192.168.241.3:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/test.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
10、测试
另起一个终端,进行之后的测试
cd /usr/local/nginx/conf/vhost/
cat test.conf
在后端服务器中再次添加一个容器,查看vhost中配置文件是否会自动发现/更新
docker run -itd -p:77:80 --name test-05 -h test05 nginx
查看nginx容器日志,请求轮询到各个容器节点上
docker logs -f test-01
docker logs -f test-02
docker logs -f test-03
11、consul多节点部署
添加一台已有docker环境的服务器192.168.241.4/24加入已有群集
这里需要准备Docker-Compose、consul_0.9.2_linux_amd64.zip
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consu-data \
-bind=192.168.241.4 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 192.168.241.3 &> /var/log/consu.log &