Docker容器二

容器的虛擬化網絡;

Docker的四種網絡模型:

Docker安裝完成后,會自動創建三個網絡,可使用“docker network ls”命令查看

QQ截圖20180801190328

默認創建的是bridge網橋的方式:

QQ截圖20180801201317

 

四種模式:

1 . null 無網卡的無網絡模式,容器不需要和外界相連

2 . bridge 橋接式 ,直接橋接到docker0網卡上。(默認使用的方法)

3 .聯盟式網絡:讓各個容器之間關于網絡方面的名稱空間是共用一個名稱空間,然后再橋接到物理網卡上

4 . docker容器都直接共用,物理網卡上。

查看網絡信息的命令:

docker network inspect bridge (查看bridge網絡的信息)

docker container inspect web2   (查看某個容器的網絡信息)

QQ截圖20180801203048

docker bridge 網絡:

宿主機會自動創建docker0 網段,以后創建的每個容器都是docker0網段的IP地址,他們之間可以相互連接的。宿主機上的docker0就像一個虛擬的交換機,將各個容器相互連接起來。

Docker0為NAT橋,因此容器一般獲得的是私有網絡地址 。

QQ截圖20180801174954

每啟動一個docker容器就會生成一對網卡,一個在宿主機上,一個在容器上。如下圖:

宿主機生成的網卡:(并將其關連到docker0的網卡上)
QQ截圖20180801191557

每個docker容器里生成的網卡及IP地址:

QQ截圖20180801191618

每個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

QQ截圖20180802200309

此時在另一臺物理機上就可以通過宿主機的網卡來訪問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為容器上要關連服務的端口號)

QQ截圖20180802204433

在宿主機上查看端口是否將容器的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界面上執行))

QQ截圖20180801204651

默認都沒有被激活,使用ifconfig是看不見這兩個網卡的。使用ip link 來查看。

ip link set dev veth1.2 netns r1  (把一個虛擬網卡移到剛創建的網絡名稱空間里)

ip netns exec r1 ifconfig -a  (此時查看r1的網絡名稱空間,發現有了一個虛擬網卡)

QQ截圖20180801205153

ip netns exec r1 ip link set dev veth1.2 name eth0  (可以將網卡名改為常用的網卡名稱)

QQ截圖20180801205443

ifconfig veth1.1 10.0.0.1/24 up  (將宿主機的里剛創建的一個虛擬網卡給個地址并激活)

此時在次查看宿主機上創建的虛擬網卡發現已經有了地址。

ifconfig:

QQ截圖20180801205828

ip netns exec r1 ifconfig eth0 10.0.0.2/24 up  (將網絡名稱r1中的虛擬網卡激活并給個IP地址)

ip netns exec r1 ifconfig  (再次啥看發現已經有IP地址了)

QQ截圖20180801210234

此時用宿主機來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模式的容器)

QQ截圖20180801214226

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服務器的地址)

QQ截圖20180801215243

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  (編輯添加加速器的配置文件)

QQ截圖20180802215219

systemctl start docker

查看新生成的網卡:

QQ截圖20180802215157

 

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/104362

(1)
無所謂無所謂
上一篇 2018-08-01
下一篇 2018-08-01

相關推薦

欧美性久久久久