當我們在系統(tǒng)中安裝docker后,系統(tǒng)網(wǎng)絡中會有docker0的網(wǎng)橋,是這樣的:

docker0
這是用來宿主機和docker內部通訊的,而 docker內部,也有自己的網(wǎng)絡,可以查看:

docker內部
可以看到docker內部默認是3大網(wǎng)絡模式:bridge、host、none
1. docker網(wǎng)絡命令
docker網(wǎng)絡命令不是很多,可以一一查看:
zrb@zrb-PC:/home/soft$ docker network --help
Usage: docker network COMMAND
Manage networks
Commands:
connect Connect a container to a network
create Create a network
disconnect Disconnect a container from a network
inspect Display detailed information on one or more networks
ls List networks
prune Remove all unused networks
rm Remove one or more networks
Run 'docker network COMMAND --help' for more information on a command.
zrb@zrb-PC:/home/soft$
-
docker network ls查看網(wǎng)絡列表 -
docker network create XXX創(chuàng)建網(wǎng)絡 -
docker network inspect XXX查看該網(wǎng)絡的情況,及使用該網(wǎng)絡的容器 -
docker network rm XXX刪除網(wǎng)絡
2. docker網(wǎng)絡模式

網(wǎng)絡模式
docker自帶了3種網(wǎng)絡模式(使用自帶的不能指定IP):
-
- bridge模式:使用
--network bridge指定,默認使用這個,一般ip為172.17.0.XXX
Docker 服務默認會創(chuàng)建一個 docker0 網(wǎng)橋(其上有一個 docker0 內部接口),該橋接網(wǎng)絡的名稱為docker0,它在內核層連通了其他的物理或虛擬網(wǎng)卡,這就將所有容器和本地主機都放到同一個物理網(wǎng)絡。Docker 默認指定了 docker0 接口 的 IP 地址和子網(wǎng)掩碼,讓主機和容器之間可以通過網(wǎng)橋相互通信。
- 1.1 Docker使用Linux橋接,在宿主機虛擬一個Docker容器網(wǎng)橋(docker0),Docker啟動一個容器時會根據(jù)Docker網(wǎng)橋的網(wǎng)段分配給容器一個IP地址,稱為Container-IP,同時Docker網(wǎng)橋是每個容器的默認網(wǎng)關。因為在同一宿主機內的容器都接入同一個網(wǎng)橋,這樣容器之間就能夠通過容器的Container-IP直接通信。
- 1.2 docker run 的時候,沒有指定network的話默認使用的網(wǎng)橋模式就是bridge,使用的就是docker0。在宿主機ifconfig,就可以看到docker0和自己create的network(后面講)eth0,eth1,eth2……代表網(wǎng)卡一,網(wǎng)卡二,網(wǎng)卡三……,lo代表127.0.0.1,即localhost,inet addr用來表示網(wǎng)卡的IP地址。
-
1.3 網(wǎng)橋docker0創(chuàng)建一對對等虛擬設備接口一個叫veth,另一個叫eth0,成對匹配。整個宿主機的網(wǎng)橋模式都是docker0,類似一個交換機有一堆接口,每個接口叫veth,在本地主機和容器內分別創(chuàng)建一個虛擬接口,并讓他們彼此聯(lián)通(這樣一對接口叫veth pair);每個容器實例內部也有一塊網(wǎng)卡,每個接口叫eth0;docker0上面的每個veth匹配某個容器實例內部的eth0,兩兩配對,一一匹配。
bridge模式
通過上述,將宿主機上的所有容器都連接到這個內部網(wǎng)絡上,兩個容器在同一個網(wǎng)絡下,會從這個網(wǎng)關下各自拿到分配的ip,此時兩個容器的網(wǎng)絡是互通的。
- bridge模式:使用
- host模式:使用
--network host指定。直接使用宿主機的 IP 地址與外界進行通信,不再需要額外進行NAT 轉換。
容器將不會獲得一個獨立的Network Namespace, 而是和宿主機共用一個Network Namespace。容器將不會虛擬出自己的網(wǎng)卡而是使用宿主機的IP和端口。
host模式
注意:當使用--network host時,就不能指定端口了
- host模式:使用
- none模式:使用
--network none指定
在none模式下,并不為Docker容器進行任何網(wǎng)絡配置。 相當于禁用網(wǎng)絡功能。
也就是說,這個Docker容器沒有網(wǎng)卡、IP、路由等信息,只有一個lo標識:就是127.0.0.1。
需要我們自己為Docker容器添加網(wǎng)卡、配置IP等。
- none模式:使用
3. 自定義網(wǎng)絡
首先明確一點,自定義網(wǎng)絡使用的是bridge網(wǎng)絡模式
- 創(chuàng)建網(wǎng)絡
sudo docker network create --subnet=192.168.20.0/24 網(wǎng)絡名稱 - 使用網(wǎng)絡,并指定IP
sudo docker run -d -p 8089:80 --net zrb_network --ip 192.168.20.10 --name nginx nginx
-
訪問測試
宿主機
nginx容器
注意:使用自定義網(wǎng)絡時,IP可以指定,項目中可以用IP訪問。同時 也可以使用 容器 host 訪問,未指定就是 容器name來訪問
4. Docker整體
從其架構和運行流程來看,Docker 是一個 C/S 模式的架構,后端是一個松耦合架構,眾多模塊各司其職。
Docker 運行的基本流程為:
- 用戶是使用 Docker Client 與 Docker Daemon 建立通信,并發(fā)送請求給后者。
- Docker Daemon 作為 Docker 架構中的主體部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的請求。
- Docker Engine 執(zhí)行 Docker 內部的一系列工作,每一項工作都是以一個 Job 的形式的存在。
- Job 的運行過程中,當需要容器鏡像時,則從 Docker Registry 中下載鏡像,并通過鏡像管理驅動 Graph driver將下載鏡像以Graph的形式存儲。
- 當需要為 Docker 創(chuàng)建網(wǎng)絡環(huán)境時,通過網(wǎng)絡管理驅動 Network driver 創(chuàng)建并配置 Docker 容器網(wǎng)絡環(huán)境。
- 當需要限制 Docker 容器運行資源或執(zhí)行用戶指令等操作時,則通過 Execdriver 來完成。
- Libcontainer是一項獨立的容器管理包,Network driver以及Exec driver都是通過Libcontainer來實現(xiàn)具體對容器進行的操作。
下面有一張圖片,我也沒看太懂

整體



