背景
docker以前的版本不支持直接配置宿主機(jī)所在網(wǎng)段ip并跟其直接互通的功能,當(dāng)然,也可以實(shí)現(xiàn)這個(gè)功能父晶,只是有點(diǎn)繞,而且還有一些第三方工具例如pipework把這些瑣碎的過程封裝起來弄跌,讓步驟簡化甲喝。但是,現(xiàn)在不需要了铛只,現(xiàn)在1.12的docker已經(jīng)直接支持了直接使用宿主機(jī)所在網(wǎng)段資源埠胖。
具體步驟
環(huán)境準(zhǔn)備
yum -y install kernel; # 更新到最新的kernel版本
yum -y update; # 更新到最新的CentOS7.x
tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
yum -y install docker-engine; # 安裝docker最新版
systemctl start docker.service; # 啟動(dòng)docker
systemctl enable docker.service; # 使docker服務(wù)隨著機(jī)器啟動(dòng)而啟動(dòng)
網(wǎng)絡(luò)創(chuàng)建
docker network create -d macvlan \
--subnet=10.0.0.0/24 \
--gateway=10.0.0.1 \
-o parent=eth0 MACNET;
注意:
- 這里的macvlan是kernel的模塊名,docker 1.12開始支持其作為驅(qū)動(dòng)來創(chuàng)建網(wǎng)絡(luò)
- 這里的10.0.0.0/24是宿主機(jī)所在網(wǎng)絡(luò)的網(wǎng)段
- 10.0.0.1是網(wǎng)關(guān)
- eth0是宿主機(jī)接入10.0.0.0/24的網(wǎng)絡(luò)設(shè)備
創(chuàng)建實(shí)例
docker run --net=MACNET \
--ip=10.0.0.11 \
-it \
--rm alpine /bin/sh;
注意:
- 10.0.0.11是新docker實(shí)例的ip地址
簡單測試
ping -c 5 10.0.0.1;
這是在上面建立的docker實(shí)例的控制臺(tái)上ping宿主機(jī)網(wǎng)關(guān)淳玩,顯示能通
ping -c 5 10.0.0.11;
這是在宿主機(jī)所在網(wǎng)段的任意其他機(jī)器上ping這臺(tái)docker實(shí)例直撤,也能通
其他
Q: 為嘛這里的docker不支持ipvlan的驅(qū)動(dòng)呢?
A: 因?yàn)楣俜劫Y料顯示kernel 4.2以上才支持ipvlan(雖然準(zhǔn)確講4.2之前也有支持蜕着,但是有bug)谋竖,而從3.9就開始支持macvlan了。
Q: 為嘛RedHat這么喜歡把高版本的功能backport到老版本的操行侮东,卻沒有把ipvlan的支持backport到3.10(CentOS 7.x的kernel版本)呢圈盔?
A: 豹芯。悄雅。。zzzzzzZZZZZZZZZ