Docker网络

 

none什么都没有的网络,挂在这个网络下的容器除了lo,没有其他任何网卡,容器创建时,可以通过--network=none指定使用none网络。

host容器的网络配置与host完全一样。可以通过--network=host指定使用host网络。host的网络性能很好,但容易产生端口冲突。

bridgebridge网络是用的最广的网络,也是默认的网络,Docker有一个名为docker0linux bridge,如果不指定--network,创建的容器默认都会挂到docker0上。每创建一个容器,就会创建一个veth pair,一端连接在docker0,另一端连接在容器网卡,bridge的端口是私有的,不会占用host端口,如果需要访问则需要通过-p-P做端口映射。

自定义网络:指定驱动,名称,cidr等可以创建自定义网络,创建完成后,ifconfig会多一个网卡,新创建的网络和docker0类似,可以像使用docker0一样使用它。创建容器时需要指定网络--network,指定好后创建的容器就会挂在这个网络下,

网络隔离

docker依赖iptables来隔离不同的容器网络,通过iptables-save查看

两个网络的通信被drop掉了,如果希望建在这两个网络上的容器可以通信,则需要在一个容器内添加一个网卡:

 

外部网络

我们知道,在bridge网络下,容器通过docker0或自定义网络来完成交互,访问外网统一需要如此,看下iptables配置:

这个配置的含义是来着docker0rhj_test网段的数据报会被docker0rhj_test转发到MASQUERADEMASQUERADE可以完成地址伪装,MASQUERADE从服务器的网卡上,自动获取当前ip地址,将包的源地址替换成host的地址发送出去,完成NAT

 

 

外部网络访问容器数据包方向相反,每一个映射的端口,host都会启动一个docker-proxy进程来处理访问容器的流量,docker-proxy会将我们在端口映射时做的配置做映射,当外部以这个ip和端口访问时,会被转发到docker0网络,再发给容器本身。

 

posted @ 2018-10-10 14:59  Small_office  阅读(163)  评论(0编辑  收藏  举报