优点:
- 可以自动分配IP地址不需要手动指定
- 集中起来管理IP地址的数据库,不需要手动安装,起一个容器就好,集中管理IP地址分配情况,避免IP地址冲突
consul服务类似于redis里的key:value类型存储的是键值对,可以当数据库来使用
准备环境(至少需要两台台机器)这边准备三台

image.png
配置:
在consul服务上 先pull一个consul的镜像服务
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
参数分解:
-h ### 指定容器里面主机名
--name ###指定容器的名字

image.png
docker 01 和 02 上
## docker01:
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries":["10.0.0.11"],
"hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
"cluster-store": "consul://10.0.0.13:8500",
"cluster-advertise": "10.0.0.11:2376"
}
## docker02:
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries":["10.0.0.11"],
"hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
"cluster-store": "consul://10.0.0.13:8500",
"cluster-advertise": "10.0.0.12:2376"
}
配置文件
hosts:监听的信息 通过sock的通信
cluster-store:集群存储信息
cluster-advertise:集群客户端信息
重启:
systemctl restart docker
-
如果重启有报错信息
image.png
解决办法
查看一下报错的配置文件路径
systemctl status docker
vim /usr/lib/systemd/system/docker.service
删掉!

image.png
systemctl daemon-reload
systemctl start docker

image.png

image.png
看到以上信息后,创建overlay全局网络
## 只要在一个节点创建会自动同步到其他节点
docker network create -d overlay --subnet 172.16.1.0/24 --gateway 172.16.1.254 ol1
启动容器测试
### docker01
docker run -it --network ol1 --name couldman01 busybox /bin/sh
### docker02
docker run -it --network ol1 --name couldman02 busybox /bin/sh
这里测试ping的时候不需要ip地址 只需要知道容器名,自动解析成IP地址

image.png
IP地址会自动分配全局唯一不会冲突 ,IP地址也会记录到consul数据里
会自动分配两个IP地址一个是跨宿主机通信用,另一个是用来上外网用 查看网关route -n
上网通信原理
宿主机默认eth0(10.0.0.11)网卡,overlay启动之后会自动起一个网关(bw_gatevay/172.18.0.1), 容器有两个IP地址eth1和eth0,eht1会通过宿主机的网关,nat转换,内核转发在到宿主机eth0上外网,宿主机之间通信 如果两台容器 ,两台容器的eth0打通一个隧道(类似交换机),eht0实现跨宿主机之间容器通信,eth1上外网
