Consulサービスの導入によるDockerコンテナのホスト間通信
4507 ワード
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サーバーは以下のように配置する
シングルノードのconsulサービスでは、2台目のDockerサーバの構成が完了しました.
3、今ブラウザを使ってconsulサービスのwebページ(consulサーバーIP:8500にアクセス)にアクセスすると、テスト用の2台のdockerサーバーIPなどの関連情報が表示されます.以下の通りです.4、2台目のDockerサーバーに戻って、overlayネットワークを作成します.
5、3台目のDockerサーバーに切り替えると、2台目のDockerサーバーで作成したoverlayネットワークが見える
実際には、2台目のDockerサーバで作成したばかりのoverlayネットワークに基づいてコンテナを実行し、3台目のDockerサーバでもこのoverlayネットワークに基づいてコンテナを実行しています.この2つの異なるホスト上のコンテナは相互に接続できます.以下のようにします.
環境は次の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