-
https://blog.whsir.com/post-5268.html
docker自身默认提供了四种网络模式:none、bridge、container、host。除了这四种网络模式外,还可以通过插件自定义一些网络模式,比如macvlan、overlay等。
默认的这四种网络模式其实很好理解,建议自行动手尝试一下!
none模式
--network none:none模式下创建的容器除了自带的lo回环网卡设备外,没有任何网卡、路由等信息,就是一种封闭式容器。这种模式下给了用户很大的自由度,用户可以根据自己的需求来定义网络环境。
例:docker run --name none --network none -it --rm busybox
bridge模式(默认)
--network bridge:这是容器默认的设置,创建的容器默认会连接到docker的网桥上(即docker0),通过docker网桥及iptables nat表配置与宿主机进行通信。
container模式
--network container:指定新创建的容器与已存在的容器共享网络名称空间,新创建的容器不会创建网卡,而是与已存在的容器共享一个网卡、IP等,两个容器之间可以通过lo回环网卡设备进行通信,但是其他名称空间,比如用户、文件系统等还是和容器隔离开的。
例:
docker run --name web1 -it --rm busybox
docker run --name web2 --network container:web1 -it --rm busybox
可以通过ifconfig命令看到,web2容器与web1容器共用一个ip地址
host模式
--network host:与container模式有些类似,container模式是容器和容器之间共享网络名称空间,host模式下docker不会为容器创建网络名称空间而是与宿主机共用一个网络名称空间,并使用宿主机的网卡、端口等信息,但是其他名称空间,比如用户、文件系统等还是和宿主机隔离开的。
例如:我们在宿主机上通过host模式启动一个nginx容器,并监听80端口,此时在容器内部通过ifconfig或ip命令查看网络环境时,所看到的信息和宿主机的信息一致,就好比nginx直接运行在宿主机一样,但是,用户、文件系统等还是和宿主机隔离开的。