最近公司使平台网络更加灵活,满足更多网络需求,所以研究docker的几种网络模式,在此记录一下,便于后期查看。
一、docker安装完成后默认的创建了host 、bridge、none三种网络模式:其中none这次不是研究的重点
1、none 网络使用场景一般比较少见,主要应用于安全性比较高的场景,且不需要与外部进行通信的任务。
示例:使用--network 指定网络模式简写 --net
docker run -dit --net=none --name=bbox3 busybox 运行一个docker容器 指定none模式
docker exec -it f6e86cecb64c /bin/sh 进入容器查看 只有lo回环地址
验证 ping www.baidu.com:
验证 ping 127.0.0.1:
无需和外部网络进行通信的场景
2、使用host网络的容器,和宿主机共享网络栈,容器的端口和IP,容易发生冲突,多个容器无法对外暴露相同的端口。有点效率高
指定host模式的容器,可以通过宿主机的ip和端口访问容器。
示例:使用--network 指定网络模式简写 --net
docker run -dit --net=host --name=nginx1 nginx 运行一个docker容器 指定host模式(通常请求下,宿主机访问访问容器内部得做端口的映射才可以)
docker run -dit --net=host --name=bbox4 busybox
docker exec -it 292abce5491b /bin/sh 进入容器查看 然后在宿主机执行ifconfig 对比下面内容
docker exec -it 5d8581b971f4 /bin/sh
宿主机ifconfig
host主机模式能够支撑容器的跨主机通信(因为容器和宿主机使用的是同一network namespace,引申为不同的容器之间的通信实际上是宿
主机之间的通信)【但是存在弊端,同一宿主机上的多个容器不能使用同一端口,这种模式并没有充分发挥到容器的隔离特性,容器和容器之间共
享宿主机共享栈】
主要用于跨主机的容器之间的通信(一般大规模部署的情况下,这种模式不常用)
3、bridge模式(容器的默认网络模式,这里不做过多的解释,直接上图,自己画了一个图)
总的概括就是docker0网桥+两个虚拟网卡的实现方式.容器间通过网桥的方式传递数据包。
4、macvlan模式:一些传统的应用或者监控应用需要直接使用主机的物理网络、可以采取macvlan模式,macvlan是直接在HOST网卡上创建多个子网卡,并分配独立的IP和mac地址,把子网卡分配给容器实
例、从而实现容器实例和物理网络的直通,并同时保持了容器实例的隔离性。 host主机收到数据包后,根据不同的mac地址将数据包转发到不同的子网