Consulサービスの導入によるDockerコンテナのホスト間通信


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サーバーは以下のように配置する
[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サービスでは、2台目の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 

3、今ブラウザを使ってconsulサービスのwebページ(consulサーバーIP:8500にアクセス)にアクセスすると、テスト用の2台のdockerサーバーIPなどの関連情報が表示されます.以下の通りです.4、2台目のDockerサーバーに戻って、overlayネットワークを作成します.
#       my_olay voerlay   
[root@docker02 ~]# docker network create -d overlay my_olay

5、3台目のDockerサーバーに切り替えると、2台目のDockerサーバーで作成したoverlayネットワークが見える
[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

実際には、2台目のDockerサーバで作成したばかりのoverlayネットワークに基づいてコンテナを実行し、3台目のDockerサーバでもこのoverlayネットワークに基づいてコンテナを実行しています.この2つの異なるホスト上のコンテナは相互に接続できます.以下のようにします.
#          
[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:  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:  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:  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:  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:  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:  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