docker 网络从覆盖范围可分为单个 host 上的容器网络和跨多个 host 的网络,docker 目前提供了映射容器端口到宿主主机和容器互联机制来为容器提供网络服务,在启动容器的时候,如果不指定参数,在容器外部是没有办法通过网络来访问容器内部的网络应用和服务的。
docker 安装时会自动在host上创建三个网络bridge、host、none
查看一下docker网络:
#docker network ls
1、none网络
none 网络就是什么都没有的网络。挂在这个网络下的容器除了 lo,没有其他任何网卡,一般应用于比较封闭的网络,一些对安全性要求高并且不需要联网的应用可以使用none 网络。
容器创建时,可以通过 --network=none 指定使用 none 网络
# docker run -it --network=none busybox
2、host网络
连接到 host 网络的容器共享 docker host 的网络栈,容器的网络配置与 host完全一样。
直接使用host 网络最大的好处就是性能,如果容器对网络传输效率有较高要求,则可以选择 host 网络。当然不便之处就是牺牲一些灵活性,比如要考虑端口冲突问题,Docker host上已经使用的端口就不能再用了。Docker host 的另一个用途是让容器可以直接配置 host 网路。比如某些跨host 的网络解决方案,其本身也是以容器方式运行的,这些方案需要对网络进行配置,比如管理 iptables。
通过 --network=host 指定使用 host 网络
# docker run -it --network=host busybox
3、bridge网络
docker 安装时会创建一个命名为 docker0 的 linux bridge。如果不指定--network,创建的容器默认都会挂到 docker0 上,可以使用brctl show命令来查看
# brctl show
创建一个新的容器时没有指定具体网络,就会选择默认的docker0,容器自身的网络接口和网桥docker0形成一对veth pair,是一一对应的关系
查看一下 bridge 网络的配置信息:
#docker network inspect bridge