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模式可以创建出一个新的自定义模式,其新启动的容器可以按新的模式配置网络环境。
实例演示:
创建新的macvlan1
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/