docker系列教程04---容器網絡

一、Docker不啓動時默認的網絡情況

這裏先把Docker停掉了,然後咱們ifconfig看一眼:

ifconfig

 

ens33不用多說了,lo爲迴環。這裏可能還會有一個virbr0,在CentOS7的安裝過程中如果有選擇相關虛擬化的的服務安裝系統後,啓動網卡時會發現有一個以網橋連接的私網地址的virbr0網卡(virbr0網卡:它還有一個固定的默認IP地址192.168.122.1),是做虛擬機網橋的使用的,其作用是爲連接其上的虛機網卡提供 NAT訪問外網的功能。當然你也可以選擇把它刪了,命令如下:

yum remove libvirt-libs.x86_64

二、Docker啓動時的網絡情況

ifconfig

 這時候docker0這個虛擬網橋就冒出來了。 這裏有一點可以稍微一下它的ip是172.17.0.1但是它的掩碼是255.255.0.0也就是16。負責容器間的互聯和通信以及端口映射

三、常用基本命令

查看網絡

docker network ls

 創建網絡默認爲bridge模式

docker network create van

 查看網絡數據源

docker network inspect bridge 

 

 

將正在運行的容器連接到網絡

docker network connect 網絡名 正在運行的容器

啓動時將容器連接到網絡 

docker run -itd --network=網絡名 即將啓動的容器

指定容器的IP地址

docker network connect --ip 10.10.10.10 網絡名 容器

四、網絡模式

1、bridge

爲每一個容器分配、設置IP等,並將容器連接到docker0的虛擬網橋。若沒有特別申明,則爲默認自帶一個IP以及網絡設置。(一人一個)

Docker服務默認會創建一個 docker0網橋(其上有一個 docker0 內部接口),該橋接網絡的名稱爲docker0,它在內核層連通了其他的物理或虛擬網卡,這就將所有容器和本地主機都放到同一個物理網絡。Docker默認指定了 docker0 接口 的 IP 地址和子網掩碼,讓主機和容器之間可以通過網橋相互通信。可以看一眼默認的網橋名:

docker network inspect bridge | grep name

 

可以看到默認的網橋名字就叫docker0。

下面來講講理論:

 

 

1 Docker使用Linux橋接,在宿主機虛擬一個Docker容器網橋(docker0),Docker啓動一個容器時會根據Docker網橋的網段分配給容器一個IP地址,稱爲Container-IP,同時Docker網橋是每個容器的默認網關。因爲在同一宿主機內的容器都接入同一個網橋,這樣容器之間就能夠通過容器的Container-IP直接通信。

2 docker run 的時候,沒有指定network的話默認使用的網橋模式就是bridge,使用的就是docker0。在宿主機ifconfig,就可以看到docker0和自己create的network(後面講)eth0,eth1,eth2……代表網卡一,網卡二,網卡三……,lo代表127.0.0.1,即localhost,inet addr用來表示網卡的IP地址

3 網橋docker0創建一對對等虛擬設備接口一個叫veth,另一個叫eth0,成對匹配。

3.1 整個宿主機的網橋模式都是docker0,類似一個交換機有一堆接口,每個接口叫veth,在本地主機和容器內分別創建一個虛擬接口,並讓他們彼此聯通(這樣一對接口叫veth pair);

3.2 每個容器實例內部也有一塊網卡,每個接口叫eth0;

3.3 docker0上面的每個veth匹配某個容器實例內部的eth0,兩兩配對,一一匹配。

通過上述,將宿主機上的所有容器都連接到這個內部網絡上,兩個容器在同一個網絡下,會從這個網關下各自拿到分配的ip,此時兩個容器的網絡是互通的。

說白了, docker0 bridge 就相當於一個交換機。它用於把宿主機的ens33網卡和上面的容器虛擬網卡進行連接,讓其可以進行聯網通信。而docker0的IP地址就是上層容器的網關。上圖中紅框所標出的就類似於進行連接的RJ45水晶頭。eth0就相當於是容器中虛擬出的網卡接口,veth相當於交換機上的接口。接下來咱們去容器實例中去看看他們的對印關係

2、host

容器不會虛擬出自己的網卡、IP等,而是使用宿主機的IP和端口。(多人一個)

 

3、none

容器有自己獨立的Network namespace,但是沒有進行任何的相關配置。(有,但是空的)

五、使用自定義網絡

自定義網絡新建時默認依舊是bridge模式,我們先來新建一個van♂的網絡:

可以看到它的驅動模式默認還是bridge。

docker network create van_network

自定義網絡本身就維護好了主機名和IP的對應關係,也就是IP和域名都能聯通

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章