01 macvlan 用于 Docker 网络
在 Docker 中,macvlan 是众多 Docker 网络模型中的一种,并且是一种跨主机的网络模型,作为一种驱动(driver)启用(-d 参数指定),Docker macvlan 只支持 bridge 模式。
下面我们做两个实验,分别验证相同 macvlan 网络和不同 macvlan 网络的连通性。
1.1 相同 macvlan 网络之间的通信
首先准备两个主机节点的 Docker 环境,搭建如下拓扑图示:
1 首先使用 docker network create
分别在两台主机上创建两个 macvlan 网络:
root@ubuntu:~# docker network create -d macvlan --subnet=172.16.10.0/24 --gateway=172.16.10.1 -o parent=enp0s8 mac1
这条命令中,
-d
指定 Docker 网络 driver--subnet
指定 macvlan 网络所在的网络--gateway
指定网关-o parent
指定用来分配 macvlan 网络的物理网卡
之后可以看到当前主机的网络环境,其中出现了 macvlan 网络:
root@ubuntu:~# docker network ls
NETWORK ID NAME DRIVER SCOPE
128956db798a bridge bridge local
19fb1af129e6 host host local
2509b3717813 mac1 macvlan local
d5b0798e725e none null local
2 在 host1 运行容器 c1,并指定使用 macvlan 网络:
root@ubuntu:~# docker run -itd --name c1 --ip=172.16.10.2 --network mac1 busybox
这条命令中,
--ip
指定容器 c1 使用的 IP,这样做的目的是防止自动分配,造成 IP 冲突--network
指定 macvlan 网络
同样在 host2 中运行容器 c2:
root@ubuntu:~# docker run -itd --name c2 --ip=172.16.10.3 --network mac1 busybox
3 在 host1 c1 中 ping host2 c2:
root