拉取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端口,可以看到页面
启动第二、第三个server加入到集群
#第一步:通过consul命令查看现有server信息
docker exec consul_server_1 consul members
//第二步:修改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
增加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_client_1
这个节点。
UI
中在service
中看不到client
但是可以在node
中看到
查看容器中运行的数据是否保存在本地
成功部署完成!