docker網絡模式及端口映射暴露

轉載http://blog.sina.cn/dpool/blog/s/blog_4da051a60102wf8o.html

Docker網絡基礎

目前docker的網絡基礎模型主要是通過以下幾種技術實現:
  • network namespaces - 提供網絡相關資源隔離
  • linux network bridge - 連接多個不同網段
  • veth pair - 兩個虛擬網卡組成的數據通道
  • iptables - 提供NAT功能及相關容器網絡安全限制


Docker網絡模式

Docker默認的網絡模式是bridge模式,其他三種模式分別是host、container、none,
具體的介紹可以參看:Docker: 4種網絡模式以及bridge模式下容器的通信
docker網絡模式及端口映射暴露X

docker服務默認會在啓動時候創建一個docker0的 虛擬網橋,實際上是 Linux 的一個 bridge,可以理解爲一個軟件交換機。它會在掛載到它的網口之間進行轉發。
同時,Docker 隨機分配一個本地未佔用的私有網段中的一個地址給docker0接口。此後啓動的容器內的網口也會自動分配一個同一網段(172.17.0.0/16)的地址。

當創建一個 Docker 容器的時候,同時會創建了一對 veth pair
接口(當數據包發送到一個接口時,另外一個接口也可以收到相同的數據包)。這對接口一端在容器內,即eth0;另一端在本地並被掛載到docker0 網橋,名稱以 veth 開頭(例如veth2dff631)。

容器eth0網卡從docker0網橋所在的IP網段中選取一個未使用的IP,容器的IP在容器重啓的時候會改變。docker0的IP爲所有容器的默認網關。容器與外界通信爲NAT。



docker暴露端口

NOTE
在docker啓動後,由於容器的ip是私有ip,這些 ip 是基於本地系統的,
並且容器的端口非本地主機是訪問不到的。
除此之外,docker容器的 ip 在每次啓動的時候都會改變。
爲了解決這些問題,Docker通過端口綁定主機系統的接口,
允許非本地客戶端訪問容器內部運行的服務。
docker可以通過以下兩種端口映射配置方法來暴露端口提供服務:
  1. 自動端口映射--expose
EXPOSE
通過在dockerfile中使用EXPOSE xxx,來記錄需要暴露的端口;
或者在啓動容器執行docker run時候,使用--expose=xxx
這個參數配置僅僅只是記錄,並不會真正將端口映射到宿主機上,還需要在運行時加上-P參數,
Docker會自動爲用戶創建端口映射規則,並且幫助避免端口映射的衝突。
使用-P自動暴露端口時,外部的端口值會在49000-49900這個端口池中隨機挑選一個。
  • 指定綁定端口-p
    在啓動容器執行docker run時候,使用-p參數顯式,
    將一個或者一組端口從容器裏綁定到宿主機上,而不僅僅是提供一個端口。
    -p ip:hostPort:containerPort
    -p ip::containerPort
    -
p hostPort:containerPort
-p containerPort
可以忽略ip或者hostPort,但是必須要指定需要暴露的containerPort。
另外,所有這些發佈的規則都默認爲tcp,如果是udp需要顯示指定,比如-p 1234:1234/udp
詳細的配置方法可以參考:Docker 端口映射
兩種配置方法的區別可以參考:Docker網絡原則入門
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章