測試docker容器內(nèi)部網(wǎng)絡(luò)能否ping通屠缭。
docker run -d -P --name tomcat01 tomcat? ? ? ? ? ? #下載tomcat測試
docker exec -it tomcat01 ip addr? ? ? ? ? ? ? ? ? ? ? ? ?#運行并查看網(wǎng)絡(luò)
ping 172.17.0.2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #測試ping通
原理
1.我們每啟動一個docker容器,docker容器都會分配一個ip,我們只要安裝了docker,就會有一個網(wǎng)卡docker0橋接模式,使用的技術(shù)是evth-pair技術(shù)!所有的容器在不指定網(wǎng)絡(luò)的情況下,都是docker0路由的角钩,docker會給我們的容器分配一個默認(rèn)的可用IP。
--link
docker exec it tomcat01 ping tomcat02? ? ? ? ? ? ? ? ? ? #此方法ping不通呻澜。
docker run -d -P --name tomcat03 --link tomcat02 tomcat? ? ? ? ? ? #此方法讓tomcat03和tomcat02聯(lián)通递礼。
docker exec it tomcat03 ping tomcat02? ? ? ? ? ? ? ? ? ? #此方法ping現(xiàn)在可以通了。2ping3是不通的羹幸,每配置不能反向連接
自定義網(wǎng)絡(luò)
好處:docker會幫我們維護(hù)好對應(yīng)關(guān)系脊髓,因為容器啟動ip會變化,現(xiàn)在可以不用ip來ping栅受,直接通容器名稱就可以ping将硝。
redis好的:不同的集群使用不同的網(wǎng)絡(luò)恭朗,保證集群是安全和健康的,mysql 也是如此依疼。
網(wǎng)絡(luò)模式
bridge:? ? 橋接docker默認(rèn)
none:? ? 不配置網(wǎng)絡(luò)
host:? ? 和宿主機(jī)共享網(wǎng)絡(luò)
container:容器網(wǎng)絡(luò)聯(lián)通(用的少痰腮,局限很大)
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat
#docker0特點:默認(rèn),域名不能訪問 --link可以訪問
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
#subnet子網(wǎng)最多支持65535律罢,gateway默認(rèn)路由 膀值,mynet名稱
docker run -d -P --name tomcat01-net01 --net mynet tomcat
docker run -d -P --name tomcat01-net02 --net mynet tomcat
docker exec it tomcat01-net01 ping tomcat01-net02
網(wǎng)絡(luò)聯(lián)通:
tomcat01使用的是docker默認(rèn)網(wǎng)絡(luò),mynet是自定義網(wǎng)絡(luò)误辑,此時兩個網(wǎng)絡(luò)是不能互通的沧踏,包括網(wǎng)絡(luò)內(nèi)的容器都不能互通,我們可以用打通的方式讓兩個網(wǎng)絡(luò)內(nèi)的容器互通巾钉。
docker network connect mynet tomcat01? ? ? ? #mynet和tomcat01容器聯(lián)通
docker network disconnect mynet tomcat1 #刪除mynet網(wǎng)絡(luò)