一、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和域名都能聯通