Docker网络

Posted small-office

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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网络,再发给容器本身。

技术分享图片

 

以上是关于Docker网络的主要内容,如果未能解决你的问题,请参考以下文章

docker容器网络

docker的网络模式:none

理解Docker :Docker 网络

理解Docker:Docker 网络

Docker下网络的认识与实验

Docker关于Docker网络隔离与通信详解