部署 Consul服務實現Docker容器跨主機通訊

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)
部署 Consul服務實現Docker容器跨主機通訊
部署 Consul服務實現Docker容器跨主機通訊
便可看到用來測試的那兩臺docker服務器IP等相關信息,以下:
部署 Consul服務實現Docker容器跨主機通訊
四、回到第二臺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
相關文章
相關標籤/搜索