docker环境部署,可以 参考我的文章,地址
https://www.cnblogs.com/emperorking/p/11214689.html
开始部署:
1.docker search consul
2.docker pull consul
3.docker images
4.启动镜像,启动一个consul的容器实例:
启动前,先创建文件夹,用于保存consul的数据。
mkdir -p /data/consul
执行命令:
docker run -d --restart=always -p 8500:8500 -v /data/consul:/consul/data -e CONSUL_BIND_INTERFACE='eth0' --name=consulone consul agent -server -bootstrap -ui -client='0.0.0.0'
5.执行完毕,如图:
6.参数介绍:
agent: 表示启动 agent 进程
server: 表示 consul 为 server 模式
client: 表示 consul 为 client 模式
bootstrap: 表示这个节点是 Server-Leader
--restart=always:Docker 重启时,容器自动启动,如开始未指定,可以使用命令:
docker container update --restart=always 容器名字,进行修改。
ui: 启动 Web UI, 默认端口 8500
node: 指定节点名称, 集群中节点名称唯一
client: 绑定客户端接口地址, 0.0.0.0 表示所有地址都可以访问
–net=host docker参数, 使得docker容器越过了netnamespace的隔离,免去手动指定端口映射的步骤
-server consul支持以server或client的模式运行, server是服务发现模块的核心, client主要用于转发请求
-advertise 将本机私有IP传递到consul
-bootstrap-expect 指定consul将等待几个节点连通,成为一个完整的集群
-retry-join 指定要加入的consul节点地址,失败会重试, 可多次指定不同的地址
-client consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1
-bind 该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0
-allow_stale 设置为true, 表明可以从consul集群的任一server节点获取dns信息, false则表明每次请求都会经过consul server leader
--name DOCKER容器的名称
-client 0.0.0.0 表示任何地址可以访问。
如果有多个端口,参数描述如下:
8500 http 端口,用于 http 接口和 Web ui
8300 server rpc 端口,同一数据中心 consul server 之间通过该端口通信
8301 serf lan 端口,同一数据中心 consul client 通过该端口通信
8302 serf wan 端口,不同数据中心 consul server 通过该端口通信
8600 dns 端口,用于服务发现
-bbostrap-expect 2: 集群至少两台服务器,才能选举集群 leader
-ui:运行 Web 控制台
-bind: 监听网口,0.0.0.0 表示所有网口,如果不指定默认未 127.0.0.1,则无法和容器通信
-client : 限制某些网口可以访问
可以查看下容器ip地址:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' consulone
172.17.0.3
错误集锦:
执行命令按照主机模式时会提示错误,丢弃已开放的端口。方法很多种,像我这种已指定端口,就不要再使用主机模式,也可以直接使用主机模式,相当于上面–net=host docker参数描述。
docker run -d --restart=always --net=host -p 8500:8500 -v /data/consul:/consul/data -e CONSUL_BIND_INTERFACE='eth0' --name=consulone consul agent -server -bootstrap -ui -client='0.0.0.0'
WARNING: Published ports are discarded when using host network mode
最后,访问地址:
http://ip:8500/ui
如下图:
至此单机版安装完毕!下面简单介绍下集群简单方式,声明:未进行实际操作,只是简书上看到别人的,先记录一下,若遇到问题,可以找我,再解决哦。
首先按照上面的安装部署完成后,执行下面命令:
docker run -d --name=consul2 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 172.17.0.3;
docker run -d --name=consul3 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 172.17.0.3;
docker run -d --name=consul4 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=false --client=0.0.0.0 --join 172.17.0.3;
参数描述:
join: 表示加入到指定集群中
1.查看集群下面的节点
docker exec -it consulone consul members
2.上述只搭建了dc1,下面开始搭建dc2,并将dc1和dc2关联起来
docker run -d --name=consul5 -e CONSUL_BIND_INTERFACE='eth0' consul agent -server -bootstrap-expect 3 -datacenter=dc2
3.往dc2添加节点:
docker run -d --name=consul6 -e CONSUL_BIND_INTERFACE=eth0 consul agent --datacenter=dc2 --server=true --client=0.0.0.0 --join 172.17.0.6;
docker run -d --name=consul7 -e CONSUL_BIND_INTERFACE=eth0 consul agent --datacenter=dc2 --server=true --client=0.0.0.0 --join 172.17.0.6;
docker run -d --name=consul8 -e CONSUL_BIND_INTERFACE=eth0 consul agent --datacenter=dc2 --server=false --client=0.0.0.0 --join 172.17.0.6;
4.关联dc1和dc2:
docker exec -it consul6 consul join -wan 172.17.0.2
5.至此可以在web ui看到dc1和dc2。