-
目录
-
-
拉取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
主要是要知道第一个server的IP,以便后面的server能够join进来。
#第二部:修改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
可以看到3个server都有了,状态正常,node-name是我们命名的consul-server1-3。
-
增加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中看到
至于client节点和server节点有啥区别。。。
-
查看容器中运行的数据是否保存在本地
成功部署完成!
本文consul命令主要参考官网:https://www.consul.io/docs/agent/options.html