consul
数据中心的含义, 可以将其当做数据库来理解, 类似于 Redis 等非关系型数据库, 采用的是键 - 值对的方式, 存放着各个容器的 IP 及端口信息.
consul 的功能很强大, 可以以群集的方式运行, 并且具备健康监测等功能.
环境如下
docker 版本为 18.09.0
部署 docker 可参考: 部署 Docker
hostname | IP | service |
---|---|---|
docker01 | 192.168.171.151 | consul |
docker02 | 192.168.171.150 | test 端 |
docker03 | 192.168.171.152 | test 端 |
1, 第一台 Docker 服务器配置如下
- [[email protected] ~]# docker pull progrium/consul
- [[email protected] ~]# docker run -d -p 8500:8500 -h consul --name consul --restart=always progrium/consul -server -Bootstrap
- #"-h": 表示 consul 的主机名;"--name consul" 表示为该容器名;"--restart=always" 表示可以随着 docker 服务的启动而启动;
- # 运行 consul 容器, 该服务的默认端口是 8500,"-p": 表示将容器的 8500 端口映射到宿主机的 8500 端口
- #"-serve -bootstarp": 表示当在群集中, 加上这两个选项可以使其以 master 的身份出现
- [[email protected] ~]# netstat -anput | grep 8500
- tcp6 0 0 :::8500 :::* LISTEN 2458/docker-proxy
单节点的 consul 服务这样就部署完成了
2, 第二台 Docker 服务器配置如下
- # 注: 第三台服务器和第二台服务器配置相同
- [[email protected] ~]# VIM /usr/lib/systemd/system/docker.service
- ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.171.151:8500 --cluster-advertise=ens33:2376
- #/var/run/docker.sock:Docker 的一个编程接口
- # "-H tcp://0.0.0.0:2376" : 使用本机的 tcp2376 端口;
- # "--cluster-store=consul://192.168.20.7:8500": 指定运行着 consul 服务的第一台 docker 服务器 IP 及端口;
- # "--cluster-advertise=ens33:2376": 从本机的 ens33 网卡通过 2376 端口搜集网络信息, 存储在 consul 上
- [[email protected] ~]# systemctl daemon-reload
- [[email protected] ~]# systemctl restart docker
3, 现在使用浏览器访问 consul 服务的 web 页面 (访问 consul 服务器 IP:8500)
即可看到用来测试的那两台 docker 服务器 IP 等相关信息, 如下:
4, 回到第二台 Docker 服务器上, 创建一个 overlay 网络
- # 创建一个名字为 my_olay 的 voerlay 网络
- [[email protected] ~]# docker network create -d overlay my_olay
5, 切换至第三台 Docker 服务器上, 发现可以看到刚刚在第二台 Docker 服务器上创建的 overlay 网络
- [[email protected] ~]# docker network ls #查看 docker03 的网络, 发现其不但有 overlay 网络
- # 而且其 SCOPE(范围) 是 global(全局的)
- NETWORK ID NAME DRIVER SCOPE
- d09f67ff6240 bridge bridge local
- 26342588dbd3 host host local
- 35fdd7467962 my_olay overlay global
- a1ab061af018 none null local
其实, 现在在第二台 Docker 服务器上基于刚刚创建的 overlay 网络运行一个容器, 在第三台 Docker 服务器上也基于这个 overlay 网络运行一个容器, 这两个在不同主机上的容器是可以互通的, 如下:
- # 第二台服务器配置如下
- [[email protected] ~]# docker run -itd --name web1 --network my_olay busybox # 基于网络 my_olay 运行一个容器 web01
- [[email protected] ~]# docker exec web1 ip a # 查看其 IP 信息, 发现其除了回环地址, 还有两个 IP
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- .NET 127.0.0.1/8 scope host lo
- valid_lft forever preferred_lft forever
- 8: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue
- link/ether 02:42:0a:00:00:02 brd ff:ff:ff:ff:ff:ff
- .NET 10.0.0.2/24 brd 10.0.0.255 scope global eth0 # 这个地址就是 my_olay 给的
- valid_lft forever preferred_lft forever
- 11: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
- link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
- .NET 172.18.0.2/16 brd 172.18.255.255 scope global eth1
- valid_lft forever preferred_lft forever
- # 第三台服务器配置如下
- [[email protected] ~]# docker run -itd --name web2 --network my_olay busybox # 基于网络 my_olay 运行一个容器 web02
- [[email protected] ~]# docker exec web2 ip a
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- .NET 127.0.0.1/8 scope host lo
- valid_lft forever preferred_lft forever
- 26: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue
- link/ether 02:42:0a:00:00:03 brd ff:ff:ff:ff:ff:ff
- .NET 10.0.0.3/24 brd 10.0.0.255 scope global eth0 # 这个地址就是 my_olay 给的, 和 docker02 一个网段
- valid_lft forever preferred_lft forever
- 29: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
- link/ether 02:42:ac:13:00:02 brd ff:ff:ff:ff:ff:ff
- .NET 172.19.0.2/16 brd 172.19.255.255 scope global eth1
- valid_lft forever preferred_lft forever
- # 在第二台 Docker 服务器上对第三台 Docker 服务器上的容器进行 ping 测试
- [[email protected] ~]# docker exec web1 ping web2
- PING web2 (10.0.0.3): 56 data bytes
- 64 bytes from 10.0.0.3: seq=0 ttl=64 time=1.246 ms
- 64 bytes from 10.0.0.3: seq=1 ttl=64 time=0.554 ms
- 64 bytes from 10.0.0.3: seq=2 ttl=64 time=0.502 ms
来源: http://www.bubuko.com/infodetail-3653626.html