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),如下图:

如何知道docker创建的容器内eth0对应宿主机上哪张veth网卡 docker0和eth0_docker

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   #用户自行定义的网络。