docker 服務(wù)啟動時(shí)默認(rèn)會創(chuàng)建一個 docker0 網(wǎng)橋,它在內(nèi)核層連通了其他的物理或虛擬網(wǎng)卡,這就將所有容器通過橋接和本地主機(jī)都放到同一個物理網(wǎng)絡(luò)。但是在使用docker的過程中,有時(shí)候我們會有將docker容器配置到和主機(jī)同一網(wǎng)段的需求。要實(shí)現(xiàn)這個需求,我們只要將docker容器和主機(jī)的網(wǎng)卡橋接起來,再給docker容器配上ip就可以了。我們使用pipework工具可以實(shí)現(xiàn)這一需求。
1.首先安裝bridge-utils網(wǎng)橋管理工具
# yum install bridge-utils
2.在centos系統(tǒng)下,創(chuàng)建一個網(wǎng)橋 br0:
device=br0
type=bridge
onboot=yes
bootproto=static
userctl=no
ipaddr=192.168.1.3
netmask=255.255.255.0
gateway=192.168.1.1
prefix=24
delay=0
dns1=192.168.1.1
3.在centos系統(tǒng)下,編輯/etc/sysconfig/network-scripts/ifcfg-eth0:
device=eth0
type=ethernet
onboot=yes
nm_controlled=no
bootproto=none
bridge=br0
4.在/etc/sysconfig/docker 文件中,添加如下docker參數(shù):
other_args=-b br0
5. 重啟網(wǎng)絡(luò)服務(wù)
$ sudo service docker restart
6.pipework安裝
$ git clone https://github.com/jpetazzo/pipework.git
$ sudo cp pipework/pipework /usr/local/bin/
7.啟動兩個測試容器
docker run -itd –name test1 –net=none centos /bin/bash
docker run -itd –name test2 –net=none centos /bin/bash
8.設(shè)置容器ip
pipework br0 test2 192.168.1.22/24@192.168.1.1
pipework br0 test1 192.168.1.33/24@192.168.1.1
容器con1和con2內(nèi)部可以看到有一個網(wǎng)卡地址分別如上,并且可以ping通,設(shè)置完成。
使用pipework自建橋接網(wǎng)絡(luò)優(yōu)點(diǎn)是可以每個容器都有獨(dú)立ip,對外提供服務(wù),如nginx php,nginx resin,都可以使用默認(rèn)的80端口,并且由于容器暴露端口都可以使用80端口,因此前端路由層nginx配置(proxy_pass)里可以使用dns的方式。缺點(diǎn)是使用pipework綁定的ip物理機(jī),虛擬機(jī),docker容器的ip都在同一網(wǎng)段,重啟后將失效,這在實(shí)際生產(chǎn)環(huán)境中是很難實(shí)現(xiàn)的,并且不適合數(shù)量多的容器,分配配置麻煩。