Docker实践(2)—虚拟网络

1 docker(container)的虚拟网络

docker的虚拟网络结构:docker

NewImage 

host建立一个虚拟bridge,每一个container对应一个虚拟网络设备(TAP设备),与bridge一块儿构成一个虚拟网络,并经过虚拟bridge相互通讯。网络

Host的物理网络设备eth0做为内部虚拟网络的NAT网关,container经过eth0访问外部网络。ssh

# ifconfigtcp

docker0   Link encap:Ethernet  HWaddr 56:84:7A:FE:97:99 url

          inet addr:127.0.0.2  Bcast:0.0.0.0  Mask:255.0.0.0code

eth0      Link encap:Ethernet  HWaddr 00:50:56:28:39:2C blog

          inet addr:172.16.213.129  Bcast:172.16.213.255  Mask:255.255.255.0ip

veth4d69  Link encap:Ethernet  HWaddr A2:7D:7B:61:CA:2F get

          inet6 addr: fe80::a07d:7bff:fe61:ca2f/64 Scope:Link博客

          UP BROADCAST RUNNING  MTU:1500  Metric:1

 

# brctl show

bridge name     bridge id               STP enabled     interfaces

docker0         8000.56847afe9799       no              veth4d69

(1)host内部container内部互访

经过虚拟网桥完成,比较简单。

 

(2)container经过NAT访问外部网络

-t nat -A POSTROUTING -s 127.0.0.0/8 ! -d 127.0.0.0/8 -j MASQUERADE

上面127.0.0.0/8是内部container的网络,若是目标地址非内部虚拟网络,则进行NAT转换。

 

(3)外部网络访问container

一般来讲,与虚拟机同样,咱们的容器是用来服务的,这就须要让外部网络可以访问container,这经过DNAT来实现。

-t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 49153 -j DNAT --to-destination 127.0.0.3:22

127.0.0.3:22是内部container的ip和sshd端口,在host上映身为49153端口。

# docker port test_sshd 22

0.0.0.0:49153

 

2与虚拟机的比较

实际上,docker的网络结构就是VMWare/KVM的NAT模式。在实际运营中,虚拟机通常会与host在同一个网络,因此采用下面这种桥接模型,而对于docker,因为container内网是不暴露给外部的,因此采用NAT方式。

KVM Bridge示意图:

 NewImage

# brctl show

bridge name     bridge id               STP enabled     interfaces

br0             8000.0019d1891e2f       no              eth0

                                                                        vnet0


做者:YY哥 
出处:http://www.cnblogs.com/hustcat/ 本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。

相关文章
相关标签/搜索