Docker的四種網絡模型:
Docker安裝完成后,會自動創建三個網絡,可使用“docker network ls”命令查看
默認創建的是bridge網橋的方式:
四種模式:
1 . null 無網卡的無網絡模式,容器不需要和外界相連
2 . bridge 橋接式 ,直接橋接到docker0網卡上。(默認使用的方法)
3 .聯盟式網絡:讓各個容器之間關于網絡方面的名稱空間是共用一個名稱空間,然后再橋接到物理網卡上
4 . docker容器都直接共用,物理網卡上。
查看網絡信息的命令:
docker network inspect bridge (查看bridge網絡的信息)
docker container inspect web2 (查看某個容器的網絡信息)
docker bridge 網絡:
宿主機會自動創建docker0 網段,以后創建的每個容器都是docker0網段的IP地址,他們之間可以相互連接的。宿主機上的docker0就像一個虛擬的交換機,將各個容器相互連接起來。
Docker0為NAT橋,因此容器一般獲得的是私有網絡地址 。
每啟動一個docker容器就會生成一對網卡,一個在宿主機上,一個在容器上。如下圖:
宿主機生成的網卡:(并將其關連到docker0的網卡上)
每個docker容器里生成的網卡及IP地址:
每個docker容器里的網卡都可以ping通到宿主機的內網的IP地址,和外網的IP地址。
每創建一個docker容器就會生成一個iptables規則,將容器內的地址做轉換,可以訪問到外網。
docker bridge網絡下的容器的幾種網絡模式:
1 .在同一個宿主機上的不同容器之間的訪問:
如果有一個docker容器的nginx的服務,在另一個docker容器里應該是可以訪問到nginx容器的nginx的web服務.
2 . 在宿主機上訪問nginx容器的nginx的web服務。也是可以的。
3 . 另一臺物理機要訪問nginx容器的nginx的web服務器。無法直接訪問,需要做地址關連,將nginx容器的IP地址關連到本地的內網或者外網的IP地址上去,這樣外部的物理機就可以訪問容器虛擬機的IP地址了。
暴露端口和地址的四種模式:
例1:
宿主機上有一臺提供web服務的容器,現在需要從另一臺物理機訪問此宿主機上的提供web服務的容器。在創建容器的時候需要將端口號暴露出來。(宿主機不指定端口也不指定IP)
docker run –name tt –rm -it -p 80 magedu/http:1.0 (magedu/http:為本機創建的http的鏡像文件)
此時已將web容器的http服務的80端口號暴露出來了,關連到宿主機上了,但關聯的宿主機的端口是隨便的,所以在宿主機上查看生成的iptables的規則,來看關連到宿主機上的哪個端口上了。
默認是將容器里的IP虛擬地址關連到宿主機上的所有的IP地址上的。
iptables -t nat -vnL
此時在另一臺物理機上就可以通過宿主機的網卡來訪問web容器的http服務了
curl 192.168.60.3:32768
也可以使用此命令docker port tt (在宿主機上查看tt容器暴露的端口)
當容器關掉之后,iptables的規則自動清除,宿主機隨機關連的端口號也清除了。
例2:
將容器的IP虛擬地址關連到宿主機上指定的某一個IP上。(在瀏覽器上輸入宿主機的指定的IP地址但端口號是隨機的需要查看來獲得才可以訪問到)宿主機指定IP但不指定端口
docker run –name tt –rm -it -p 192.168.60.20::80 magedu/http:1.0
(192.168.60.20::80 :前面的地址為宿主機上的IP地址;::兩個冒號之間為宿主機關連到容器上的端口號沒寫為隨機端口 80為容器上要關連服務的端口號)
在宿主機上查看端口是否將容器的IP地址關連到宿主機上指定的IP地址。
例3:
將宿主機上指定的IP和指定的端口關連到虛擬機的IP地址上。(在瀏覽器上輸入宿主機指定的IP和指定的端口號才可以訪問到容器上)宿主機指定端口也指定IP
docker run –name tt –rm -it -p 192.168.60.20:80:80 magedu/http:1.0
例4:
不指定宿主機關連到容器的IP地址,但指定宿主機使用的端口號。(在瀏覽器上訪問宿主機的所有IP地址,但端口號必須是指定的80;都可以連接到容器上)宿主機指定端口但不指定IP
docker run –name tt –rm -it -p 80:80 magedu/http:1.0
創建網絡名稱空間,和虛擬網卡,并使其通信
ip netns add r1
ip netns add r2 (創建兩個網絡名稱空間;在linux界面上執行)
ip link add name veth1.1 type veth peer name veth1.2 (創建兩個虛擬網卡對;在linux界面上執行))
默認都沒有被激活,使用ifconfig是看不見這兩個網卡的。使用ip link 來查看。
ip link set dev veth1.2 netns r1 (把一個虛擬網卡移到剛創建的網絡名稱空間里)
ip netns exec r1 ifconfig -a (此時查看r1的網絡名稱空間,發現有了一個虛擬網卡)
ip netns exec r1 ip link set dev veth1.2 name eth0 (可以將網卡名改為常用的網卡名稱)
ifconfig veth1.1 10.0.0.1/24 up (將宿主機的里剛創建的一個虛擬網卡給個地址并激活)
此時在次查看宿主機上創建的虛擬網卡發現已經有了地址。
ifconfig:
ip netns exec r1 ifconfig eth0 10.0.0.2/24 up (將網絡名稱r1中的虛擬網卡激活并給個IP地址)
ip netns exec r1 ifconfig (再次啥看發現已經有IP地址了)
此時用宿主機來ping網絡空間的虛擬IP地址:ping 10.0.0.2 (可以通的)
如果將在宿主機上的虛擬網卡移動到創建的網絡名稱空間r2里去,r1和r2兩個名稱空間就可以通信了。
ip link set dev veth1.1 netns r2
ip netns exec r2 ifconfig veth1.1 10.0.0.3/24 up (將移進到網絡名稱空間r2的虛擬網卡添加地址并且激活)
ip netns exec r2 ifconfig (查看網絡名稱空降r2已經有了地址)
ip netns exec r2 ping 10.0.0.2 (在r2網絡名稱空間里去pingr1的IP地址)
創建各種網絡模式的容器:
docker run –name f1 -it –rm busybox:latest (創建一個busybox容器,退出后并刪掉)
docker run –name f1 -it –network none –rm busybox:latest (創建一個null模式的容器)
docker run –name f1 -it –network none -h t1.magedu –rm busybox:latest (創建容器時,指定容器的主機名)
docker run –name f1 -it –network none -h t1.magedu –dns 8.8.8.8 –rm busybox:latest (創建容器時指定dns服務器的地址)
docker run –name f1 -it –network none -h t1.magedu –add-host www.magedu.com:192.168.7.7 –rm busybox:latest (指定hosts文件的dns解析地址)
創建一個使用共同虛擬網卡的兩個容器:
docker run –name tt –rm -it magedu/http:1.0 (首先在宿主機上創建一個容器)
查看上面容器的IP地址:
在相同的宿主機上在創建一個和tt共用虛擬地址的容器:
docker run –name tt1 –network container:tt –rm -it magedu/http:1.0
此時在查看tt1的虛擬IP地址,發現和tt的虛擬IP地址是相同的。
此時兩個容器共享一個虛擬IP地址,通過本容器的本地地址127.0.0.1可以相互來連接。
創建一個使用共同物理網卡的兩個容器:
docker run –name tt1 –network host –rm -it magedu/http:1.0
docker run –name tt –network host –rm -it magedu/http:1.0
以上兩個容器直接關連到宿主機上的所有的物理網卡上了。此時在瀏覽器上就可以直接訪問容器里的虛擬機了,因為容器里的虛擬機的IP地址和宿主機的IP地址是相同的。
簡單的配置虛擬機的http服務的主頁面:
echo "hell" > /tmp/index.html (創建一個主頁面)
httpd -h /tmp/ (啟動的時候指定主頁面的路徑)
此時在瀏覽器上訪問宿主機的IP地址,就能看到容器提供http服務的頁面。
指定bridge 的IP地址,不使用系統默認172.17.0.0/16的IP地址:
停止docker服務:systemctl stop docker
vim /etc/docker/daemon.json (編輯添加加速器的配置文件)
systemctl start docker
查看新生成的網卡:
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/104362