0%

consul【集群容器化部署】

拉取consul镜像

docker pull consul:1.6.0

本地创建映射目录及配置文件

#创建server1对应的目录
mkdir /docker/consul/server1
mkdir /docker/consul/server1/data
mkdir /docker/consul/server1/config
 
#创建server2对应的目录
mkdir /docker/consul/server2
mkdir /docker/consul/server2/data
mkdir /docker/consul/server2/config
 
#创建server3对应的目录
mkdir /docker/consul/server3
mkdir /docker/consul/server3/data
mkdir /docker/consul/server3/config
 
#consul容器默认config路径在/consul/config,data路径在/consul/data
#使用docker -v映射,启动可以使用本地config,data也可以持久化到本地
// 创建server1配置文件config.json
// 注意配置ui集群页面,client_addr对应-client,bootstrap
 
{
    "datacenter":"dc1",
    "primary_datacenter":"dc1",
    "server":true,
    "ui":true,
    "client_addr":"0.0.0.0",
    "bootstrap":true,
    "enable_script_checks":false,
    "node_name":"consul-server-1",
    "enable_local_script_checks":true
}
 
// 拷贝同样的配置到/docker/consul/server2,/docker/consul/server3目录下,注意去掉ui和bootstrap属性,注意修改节点名node_name,不能冲突
// client_addr不写的话,外面服务访问不了容器里的consul服务

启动容器

#docker启动命令
 
docker run -d -e CONSUL_BIND_INTERFACE=eth0 -v /docker/consul/server1/config:/consul/config -v /docker/consul/server1/data:/consul/data  -p 8500:8500  --name=consul consul:1.6.0 agent
 
#前面的不解释了,-v是将本地目录映射到容器内,容器内的路径是刚刚config.json配置中指定的,启动consul时指定配置文件,实际这个配置文件在本地/docker/consul/server1/config/config.json

访问本地8500端口,可以看到页面

consul

启动第二、第三个server加入到集群

#第一步:通过consul命令查看现有server信息
docker exec consul_server_1 consul members

consul

//第二步:修改server2和server3的配置文件,增加以下内容
    "start_join":[
        "172.17.0.4"
    ],
    "retry_join":[
        "172.17.0.4"
    ]
//注意保持json格式正确
//也可以在docker启动命令后加 -join=172.17.0.4 -retry-join=172.17.0.4,结果一样
#第三步:使用docker命令启动server2和server3

#启动第2个server节点
docker run -d -e CONSUL_BIND_INTERFACE=eth0 -v /docker/consul/server2/config:/consul/config -v /docker/consul/server2/data:/consul/data --name=consul_server_2 consul:1.6.0 agent
 
 
#启动第3个server节点
docker run -d -e CONSUL_BIND_INTERFACE=eth0 -v /docker/consul/server3/config:/consul/config -v /docker/consul/server3/data:/consul/data --name=consul_server_3 consul:1.6.0 agent

查看ui

consul

增加client类型consul

// 复制一个config.json到/docker/consul/client1目录下
// 修改client1的配置文件,具体如下
 
{
    "datacenter":"dc1",
    "primary_datacenter":"dc1",
    "server":false,
    "client_addr":"0.0.0.0",
    "enable_script_checks":false,
    "node_name":"consul-client-1",
    "enable_local_script_checks":true,
    "start_join":[
        "172.17.0.4"
    ],
    "retry_join":[
        "172.17.0.4"
    ]
}
 
// 注意点:指明了server为false
# docker启动
docker run -d -e CONSUL_BIND_INTERFACE=eth0 -v /docker/consul/client1/config:/consul/config -v /docker/consul/client1/data:/consul/data --name=consul_client_1 consul:1.6.0 agent

client加入之后可以通过命令consul members查看
consul

可以看到我们刚刚启动的consul_client_1这个节点。

UI中在service中看不到client
consul

但是可以在node中看到
consul

查看容器中运行的数据是否保存在本地

consul
成功部署完成!

参考链接