consul
数据中心的含义,能够将其当作数据库来理解,相似于Redis等非关系型数据库,采用的是键-值对的方式,存放着各个容器的IP及端口信息。
consul的功能很强大,能够以群集的方式运行,而且具有健康监测等功能。web
环境以下
docker版本为 18.09.0
部署docker可参考:部署 Dockerdocker
hostname | IP | service |
---|---|---|
docker01 | 192.168.171.151 | consul |
docker02 | 192.168.171.150 | test 端 |
docker03 | 192.168.171.152 | test 端 |
一、第一台Docker服务器配置以下数据库
[root@docker01 ~]# docker pull progrium/consul [root@docker01 ~]# 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的身份出现 [root@docker01 ~]# netstat -anput | grep 8500 tcp6 0 0 :::8500 :::* LISTEN 2458/docker-proxy
单节点的consul服务这样就部署完成了
二、第二台Docker服务器配置以下编程
#注:第三台服务器和第二台服务器配置相同 [root@docker02 ~]# 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上 [root@docker02 ~]# systemctl daemon-reload [root@docker02 ~]# systemctl restart docker
三、如今使用浏览器访问consul服务的web页面(访问consul服务器IP:8500)
便可看到用来测试的那两台docker服务器IP等相关信息,以下:
四、回到第二台Docker服务器上,建立一个overlay网络bootstrap
#建立一个名字为my_olay的voerlay网络 [root@docker02 ~]# docker network create -d overlay my_olay
五、切换至第三台Docker服务器上,发现能够看到刚刚在第二台Docker服务器上建立的overlay网络vim
[root@docker03 ~]# 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网络运行一个容器,这两个在不一样主机上的容器是能够互通的,以下:浏览器
#第二台服务器配置以下 [root@docker02 ~]# docker run -itd --name web1 --network my_olay busybox # 基于网络my_olay运行一个容器web01 [root@docker02 ~]# 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 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 8: eth0@if9: <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 inet 10.0.0.2/24 brd 10.0.0.255 scope global eth0 # 这个地址就是my_olay给的 valid_lft forever preferred_lft forever 11: eth1@if12: <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 inet 172.18.0.2/16 brd 172.18.255.255 scope global eth1 valid_lft forever preferred_lft forever #第三台服务器配置以下 [root@docker03 ~]# docker run -itd --name web2 --network my_olay busybox # 基于网络my_olay运行一个容器web02 [root@docker03 ~]# 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 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 26: eth0@if27: <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 inet 10.0.0.3/24 brd 10.0.0.255 scope global eth0 # 这个地址就是my_olay给的,和docker02 一个网段 valid_lft forever preferred_lft forever 29: eth1@if30: <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 inet 172.19.0.2/16 brd 172.19.255.255 scope global eth1 valid_lft forever preferred_lft forever #在第二台Docker服务器上对第三台Docker服务器上的容器进行ping测试 [root@docker02 ~]# 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