Docker网络模式详解

0x00 前言

在最近使用docker搭建环境的过程中,发现docker容器默认的网络模式并不能很好的满足需求,然后便查看了一下docker关于网络配置的官方文档,发现在官方文档中,给出了五种docker的网络模式,还是能比较全面的满足各种需求的,下面介绍一下这几种模式。

0x01 bridge模式

bridge模式,这是docker容器启动时默认的网络模式,当启动容器时不提供--net参数时,docker容器便默认以这种模式配置网络环境。这也是在使用docker容器时,最常用的网络模式。
关于桥接模式,官方文档时这样说的当您的应用程序在需要通信的独立容器中运行时,通常会使用桥接网络
简单画了个图帮助理解这种模式

实际演示:
首先使用默认模式即桥接模式启动两个docker容器,并查看其ip

测试两台容器间互通

通过命令docker exec bridge1 ip addr show看到两个容器均虚拟出了自己的网卡eth0

查看宿主机网卡,可发现多出来docker0,而此网卡即为各桥接模式启动的容器的网关

同时宿主机上还多出来两个veth开头的网卡,其伴随着桥接模式容器的eth0网卡出现而出现。其作用为连通docker0与容器内网卡eth0。因此docker0并不只是一个简单的网卡了,而是一个网桥。

0x02 host模式

使用host模式时容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
实际演示
docker run -itd --net=host --name=host awd_zentao /bin/bash
查看其网卡发现其与主机一样

0x03 container模式

该模式类似于host模式,只不过host模式是主机与容器共享Network Namespace,而container模式是容器之间共享Network Namespace。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。
实际演示:
其配置方式为--net=container:<name_or_id>
这里选择与之前的bridge1共享

0x04 none模式

使用none模式不会对docker容器进行任何网络配置,只有lo本地环回网络,Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
实际演示:

0x05 macvlan模式

本次学习正式因为想搭建docker集群与宿主机在同一个c段,以使宿主机同c段主机可以连同docker容器,本来也可以使用bridge模式加端口映射的方法,但发现使用macvlan方式更为合适。
macvlan模式可以创建出一个新的自定义模式,其新启动的容器可以按新的模式配置网络环境。
实例演示:
创建新的macvlan

1
docker network create -d macvlan  --subnet=192.168.111.0/24 --gateway=192.168.111.1 -o parent=ens33 gitlab-net

使用docker network ls可以看到新创建的gitlab-net网络

使用docker run --net=gitlab-net --ip=192.168.111.201 -dit --name test1 awd_zentao即可创建新的容器,可通过--net=gitlab-net指定其为新的模式,--ip参数指定容器ip
查看其网卡信息

相对于前面几种模式,该模式更加灵活,可根据实际需求配置出新的模式,满足较为复杂的网络需求。

0x06 overlay模式

overlay模式可用于连接不同机器上的docker容器,允许不同机器上的容器相互通信,同时支持对消息进行加密。
笔者暂时未用过该模式,具体可参考https://docs.docker.com/network/overlay/

本文标题:Docker网络模式详解

文章作者:boogle

发布时间:2019年04月01日 - 20:50

最后更新:2019年04月02日 - 09:12

原始链接:https://zhengbao.wang/Docker网络模式详解/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

感觉写的不错,给买个棒棒糖呗