docker的网络(5)

当 Docker 启动时,会自动在宿主机上创建一个 docker0 虚拟网桥,实际上是Linux 的一个 bridge。

Docker 随机分配一个本地未占用的私有网络(在RFC1918中定义)中的一个地址给 docker0接口。比如典型的 172.17.0.1,掩码为255.255.0.0。

此后启动的容器内的网口也会自动分配一个网段(172.17.0.0/16)的地址。

当创建一个 Docker 容器的时候,同时会创建一个 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以接收相同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到docker0 网桥,名称以veth 开头(例如 veth4c45933)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间的一个虚拟共享网络。

Docker 网络相关的命令

只有在Docker 服务启动的时候才能配置,而且不能马上生效的有:

-b  BRIDGE  or --bridge=BRIDGE        --指定容器挂载的网桥
--bip=CIDR                     --定制docker0的掩码
-H SOCKET... or --host=SOCKET...      --Docker服务端接收命令的通道
--icc=true|false                --是否支持容器之间进行通信
--ip-forward=true|false            --请看下文容器之间的通信
--iptables=true|false              --是否允许Docker添加iptables规则
--mtu=BYTES                     --容器网络中的MTU

既可以在启动服务时指定,也可以 Docker容器启动(docker run)时候指定。在Docker 服务启动的时候指定则会成为默认值,后面执行 docker run 时可以覆盖设置的默认值:

--dns=IP_ADDRESS...          --使用指定的DNS服务器
--dns-search=DOMAIN...        --指定DNS搜索域
    
只有在 docker run 执行时使用,因为它是针对容器的特性内容:

-h  HOSTNAME  or  --hostname=HOSTNAME        --配置容器主机名
--link=CONTAINER_NAME:ALIAS              --添加到另一个容器的连接
--net=bridge|none|container:NAME_or_ID|host  --配置容器的桥接模式
-p  SPEC  or  --publish=SPEC              --映射容器端口到宿主主机
-P  or  --publish-all=true|false           --映射容器所有端口到宿主主机
View Code

当 Docker 启动时,会自动在宿主机上创建一个 docker0 虚拟网桥,实际上是Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。

 

猜你喜欢

转载自www.cnblogs.com/topass123/p/12585656.html