docker的虛擬網絡結構:docker
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
實際上,docker的網絡結構就是VMWare/KVM的NAT模式。在實際運營中,虛擬機通常會與host在同一個網絡,因此採用下面這種橋接模型,而對於docker,因爲container內網是不暴露給外部的,因此採用NAT方式。
KVM Bridge示意圖:
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.0019d1891e2f no eth0
vnet0
做者:YY哥
出處:http://www.cnblogs.com/hustcat/ 本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。