1、 Docker服务端启动的时候会在主机上创建一个docker0的虚拟网桥,实际上就是一个Linux网桥,可理解为一个软件交换机,它会在挂载其上的接口之间进行转发,如下图所示,与此同时Docker随机分配一个本地未占用的私有网段中的一个地址给docker0接口。比如典型的172.17.42.1,掩码为255.255.0.0。此后启动的容器内的网口也会自动分配一个同一个网段(172.17.0.0/16)的地址。当创建一个容器的时候会创建一对veth pair 接口(当数据包发送到一个接口的时候,另一个接口也可以收到相同是数据包)。这对接口一端在容器内即eth0;另一端在本地并被挂载到docker0网桥上,名称以veth开头(例如veth123),如下图:
2、Docker服务端启动的时候网络相关命令参数,其中有的参数只能在Docker服务端启动后才能配置,且不能立马生效。命令详细如下:
-- bridge=bridgeName or -b bridgeName #指定后面启动容器时候挂载的网桥 如docker0网桥。
--bip=CIDR #定制docker0的掩码。
-H SOCKET... or --host=SOCKET... # 指定Docker服务端接受命令通道。
--icc=true|false #配置后面启动的容器之间是否支持通信。
--ip-forward=true|false #配置是否启用net.ipv4.ip_forward,即是否打开转发功能。
--iptables=true|false #配置是否允许Docker添加iptables规则。
下面2个命令选项既可以在启动Docker服务端的时候使用,也可以在启动容器(docker run)的时候指定,在启动Docker服务端的时候
指定则会成为默认值,后续docker run 的时候可以覆盖设置的默认值,命令选项详细如下:
--dns=IP_ADDRESS... #指定使用DNS服务器。
--dns-serach=DOMAIN... #指定DNS搜索域。
下面这些选项只能在docker run 命令执行的时候使用,如下:
-h hostname or --hostname=hostname #配置容器主机名。
--link=container_name:alias #添加到另外一个容器的连接。
--net=bridge | none | container:containerName_or_containerId | host | user_defined_network #配置容器的桥接模式。
详细说明 --net的五种模式
--net=bridge #默认配置,为容器创建独立的网络命名空间,分配网卡、IP地址等网络配置,并通过veth接口对 将容器挂载到
虚拟网桥(默认为docker0)上。
--net=none #为容器创建独立的网络命名空间,但是不进行网络配置,即容器内没有创建网卡、IP地址等。
--net=container:containerName_or_containerId #意味着新创建的容器共享指定的已存在容器的网络命名空间,两个容器内的
网络配置共享,但其他资源(进程空间、文件系统等)还是相互隔离的。
--net=host #意味着不为容器创建独立的网络命名空间,容器内看到的网络配置(网卡信息、路由表、Iptables规则等)均与
主机上保持一致。注意其他资源还是与主机隔离的。
--net=user_defined_network #用户自行定义的网络。