1. 程式人生 > >Docker之 預設橋接網路與自定義橋接網絡卡

Docker之 預設橋接網路與自定義橋接網絡卡

docker引擎會預設建立一個docker0網橋,它在核心層連通了其他的物理或虛擬網絡卡,這就將所有容器和宿主機都放到同一個二層網路。

1. docker如何使用網橋

1.1 Linux虛擬網橋的特點

網橋工作在二層(OSI堆疊),是通用網路裝置的一種,可以設定IP地址。有了IP地址,Linux便可通過路由表或IP表,在網路層定位網橋,這就相當於有了一個虛擬網絡卡,即docker0。docker0預設的地址劃分:

IP: 127.17.42.1/16

MAC : 02:42:ac:11:00:00 到 02:42:ac:11:ff:ff,共65534個地址

1.2 docker0網橋連線方式

 

網路配置過程如下:

a. 在宿主機上建立一對虛擬網絡卡veth pair裝置。veth裝置總是成對出現的,它們組成了一個數據的通道,資料從一個裝置進入,就會從另一個裝置出來。因此,veth裝置常用來連線兩個網路裝置。

b. 在容器啟動時,Docker引擎將veth pair裝置的一端放在新建立的容器中,並命名為eth0。另一端放在宿主機中,以veth***這樣類似的名字命名,並將這個網路裝置加入到docker0網橋中,可以通過brctl show命令檢視。

c. 從docker0子網中分配一個IP給容器使用,並設定docker0的IP地址為容器的預設閘道器。

 

2. docker0網橋實現方式

2.1 檢視docker0網橋

# yum install bridge-utils

// 檢視主機網橋資訊
# brctl show

// 檢視容器網絡卡資訊
# docker run -d --name test locutus1/centos /bin/bash

cID#ifconfig 
ctrl+p ; ctrl+q

// 在主機中檢視,docker0開放的網路介面veth
# brctl show

# ifconfig 

2.2 修改docker0網段

# ifconfig docker0 192.168.1.10/24 up

// 驗證docker0更改為目標網段
# ifconfig docker0

# service docker restart

// 檢視容器網路介面,驗證是否更改為docker0網段 
# docker run -d --name test locutus1/centos /bin/bash

cID#ifconfig 

2.3 自定義linux虛擬網橋br0

// 新增網橋br0 
# brctl addbr br0

# ifconfig br0 172.17.0.0/24 up

// 修改docker啟動配置檔案(centos下,docker啟動配置檔案路徑是/etc/sysconfig/docker),新增DOCKER_OPTS值,使docker啟用新新增的網橋br0 
# vim /etc/sysconfig/docker

DOCKER_OPTS="-b=br0"

// 修改docker守護程序配置檔案,新增EnvironmentFile絕對路徑與啟動項$DOCKER_OPTS,其中“ - ”代表ignore error 
# vim /lib/systemd/system/docker.service

EnvironmentFile=-/etc/sysconfig/docker 
ExecStart=/usr/bin/dockerd $DOCKER_OPTS

// 重啟所有守護程序。重新裝載所有守護程序的unit檔案,然後重新生成依賴關係樹
# systemctl daemon-reload

# service docker restart

// 檢視容器IP,驗證其更改為br0網段 
# docker run -it --name test2 centos /bin/bash

cID# yum install -y net-tools.x86_64 
cID# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20<link>
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 1188 bytes 7830677 (7.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1073 bytes 73229 (71.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0