hostname | ip | 系統(tǒng)版本 |
---|---|---|
cdh1 | 10.30.10.111 | centos7 |
cdh2 | 10.30.10.112 | centos7 |
要實現(xiàn)overlay網(wǎng)絡(luò),我們會有一個服務(wù)發(fā)現(xiàn)。比如說consul,會定義一個ip地址池,比如10.0.2.0/24之類的。上面會有容器,容器的ip地址會從上面去獲取。獲取完了后,會通過ens33來進(jìn)行通信,這樣就可以實現(xiàn)跨主機(jī)的通信。
consul通過docker部署在cdh1,首先需要修改cdh1中的docker配置并重啟
[root@cdh1 /]# vim /etc/docker/daemon.json //添加以下配置 "live-restore":true [root@cdh1 /]# systemctl restart docker
“l(fā)ive-restore”:true 此配置的作用為在docker守護(hù)程序停止或重啟的時候,容器依然可以保持運行
在cdh1下載consul鏡像并啟動
[root@cdh1 /]# docker pull consul [root@cdh1 /]# docker run -d -p 8500:8500 -h consul --name consul consul
修改cdh1中的docker配置并重啟
[root@cdh1 /]# vim /etc/docker/daemon.json # 添加以下兩行配置 "cluster-store": "consul://10.30.10.111:8500" "cluster-advertise": "10.30.10.111:2375" [root@cdh1 /]# systemctl restart docker
修改cdh2中的docker配置并重啟
[root@cdh2 /]# vim /etc/docker/daemon.json # 添加以下兩行配置 "cluster-store": "consul://10.30.10.111:8500" "cluster-advertise": "10.30.10.112:2375" [root@cdh2 /]# systemctl restart docker
cluster-store指定的是consul服務(wù)地址,因為consul服務(wù)運行在cdh1的8500端口,所以兩臺機(jī)器的cluster-store值均為consul://10.30.10.111:8500
cluster-advertise指定本機(jī)與consul的通信端口,所以指定為本機(jī)的2375端口
此時可以通過http://10.30.10.111:8500/訪問consul地址
在Key/Value菜單中的docker-nodes目錄中可以看到cdh1和cdh2兩個docker節(jié)點,代表consul配置成功。
此時我們可以創(chuàng)建overlay網(wǎng)絡(luò),首先查看目前節(jié)點中已有的網(wǎng)絡(luò)類型
[root@cdh1 /]# docker network ls NETWORK ID NAME DRIVER SCOPE ab0f335423a1 bridge bridge local b12e70a8c4e3 host host local 0dd357f3ecae none null local
然后在cdh1的docker節(jié)點創(chuàng)建overlay網(wǎng)絡(luò),因為此時consul服務(wù)發(fā)現(xiàn)已經(jīng)正常運行,且cdh1和cdh2的docker服務(wù)已經(jīng)接入,所以此時overlay網(wǎng)絡(luò)是全局創(chuàng)建的,在任何一臺宿主機(jī)創(chuàng)建一次即可。
[root@cdh1 /]# docker network create -d overlay my_overlay cafa97c5cf9d30dd6cef08a5e9710074c828cea3fdd72edb45315fb4b1bfd84c [root@cdh1 /]# docker network ls NETWORK ID NAME DRIVER SCOPE ab0f335423a1 bridge bridge local b12e70a8c4e3 host host local cafa97c5cf9d my_overlay overlay global 0dd357f3ecae none null local
此時可以看到,創(chuàng)建的overlay網(wǎng)絡(luò),標(biāo)識為golbal。我們可以查看cdh2的網(wǎng)絡(luò),可以發(fā)現(xiàn)overlay網(wǎng)絡(luò)也已經(jīng)創(chuàng)建完畢。
[root@cdh2 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 90d99658ee8f bridge bridge local 19f844200737 host host local cafa97c5cf9d my_overlay overlay global 3986fe51b271 none null local
創(chuàng)建完成后,我們可以在cdh1和cdh2中指定overlay網(wǎng)絡(luò)創(chuàng)建docker容器,并進(jìn)行測試,查看是否可以跨宿主機(jī)通信。
在cdh1中創(chuàng)建名稱為master的容器,并查看其IP
[root@cdh1 /]# docker run -itd -h master --name master --network my_overlay centos7_update /bin/bash [root@cdh1 /]# docker inspect -f "{{ .NetworkSettings.Networks.my_overlay.IPAddress}}" master 10.0.0.2
在cdh1中創(chuàng)建名稱為slaver的容器,并查看其IP
[root@cdh2 ~]# docker run -itd -h slaver --name slaver --network my_overlay centos7_update /bin/bash [root@cdh2 ~]# docker inspect -f "{{ .NetworkSettings.Networks.my_overlay.IPAddress}}" slaver 10.0.0.3
此時進(jìn)入兩臺容器中,互相ping對方的IP,查看是否成功通信
[root@cdh1 ~]# docker exec -it master /bin/bash [root@master /]# ping 10.0.0.3 PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data. 64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=0.587 ms 64 bytes from 10.0.0.3: icmp_seq=2 ttl=64 time=0.511 ms 64 bytes from 10.0.0.3: icmp_seq=3 ttl=64 time=0.431 ms 64 bytes from 10.0.0.3: icmp_seq=4 ttl=64 time=0.551 ms 64 bytes from 10.0.0.3: icmp_seq=5 ttl=64 time=0.424 ms ^C --- 10.0.0.3 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4000ms rtt min/avg/max/mdev = 0.424/0.500/0.587/0.070 ms
[root@cdh2 ~]# docker exec -it slaver /bin/bash [root@slaver /]# ping 10.0.0.2 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.499 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.500 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.410 ms 64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.370 ms ^C --- 10.0.0.2 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3000ms rtt min/avg/max/mdev = 0.370/0.444/0.500/0.062 ms
成功通信!
到此這篇關(guān)于docker容器間跨宿主機(jī)通信-基于overlay的實現(xiàn)方法的文章就介紹到這了,更多相關(guān)docker容器間跨宿主機(jī)通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:開封 玉林 晉城 鄭州 石嘴山 汕頭 三明 拉薩
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《docker容器間跨宿主機(jī)通信-基于overlay的實現(xiàn)方法》,本文關(guān)鍵詞 docker,容器,間跨,宿,主機(jī),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。