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