docker 網絡模式 和 端口映射


docker 的 網絡模式

docker 自帶 3 種 網絡模式:分別是bridge網絡,host網絡,none網絡,可以使用  docker network ls  命令查看。

1.none網絡

這種網絡模式下容器只有lo回環網絡,沒有其他網卡。none網絡可以在容器創建時通過  --network=none 來指定。這種類型的網絡沒有辦法聯網,封閉的網絡能很好的保證容器的安全性。

2.host網絡

通過命令--network=host指定,使用host模式的容器可以直接使用docker host的IP地址與外界通信,容器內部的服務端口也可以使用宿主機的端口,不需要進行NAT,host最大的優勢就是網絡性能比較好,但是docker host上已經使用的端口就不能再用了,網絡的隔離性不好。

 

3.bridge網絡

容器的默認網絡模式,docker在安裝時會創建一個名為docker0的Linux bridge,在不指定--network的情況下,創建的容器都會默認掛到docker0上面。

 

創建多個容器,都不指定 net 情況下 , docker network inspect bridge,  查看 bridge 網絡情況。

 

查看 主機網橋情況  ,brctl  show, 在 docker0  網橋下有3個接口,對應前面容器的各自的虛擬網卡。創建一個容器之后一個新的網絡接口被掛載到了docker0上,這個就是容器創建時創建的虛擬網卡。bridge模式為容器創建獨立的網絡棧,保證容器內的進程使用獨立的網絡環境,使容器之間,容器和docker host之間實現網絡隔離。

這里可以看出 docker0 網橋 上對應有3個容器掛靠的虛擬網卡, 此 3 個容器之間可以互相通信,因為在同一個網橋下。

思考?? 不同網橋下的容器間 能通信嗎?

1. 先手動建立一個 bridge 模式的新 網橋, docker network  create --driver  bridge  --subnet=172.18.0.0/16  --gateway=172.18.0.1  new_bridge

2. docker network ls   可以查看 docker 下現在的網絡模式(新加的那個)

3.  docker  run  -name test1  -ti  --net=new_bridge   鏡像名   (用新網橋的一個容器 test1)

4. docker  run  -name test2  -ti   --net=bridge  鏡像名   (用 docker 默認網橋的一個容器test2)

5. 進入到其中一個容器 ,ip a  查看網卡,ping  另一個容器IP  

6. 進另一個容器,同上。 兩個容器IP段不一樣。 不同網橋,會創建不同網段的虛擬網卡給容器 。

7. 不同網橋下的容器間 不能ping通, 在於docker 設計時候就隔離了不同網橋  

8. docker  network  connect   new_bridge   test2   //  為  test2 容器添加一塊 new_bridge的 虛擬網卡,這樣test2 上會 創建一個新的虛擬網卡,網段就是 新網橋設置的。

9. 如此就能互相ping通。

4.container模式

創建容器時使用--network=container:NAME_or_ID這個模式在創建新的容器的時候指定容器的網絡和一個已經存在的容器共享一個Network Namespace,

但是並不為docker容器進行任何網絡配置,這個docker容器沒有網卡、IP、路由等信息,需要手動的去為docker容器添加網卡、配置IP等。(這個后面在驗證)

參考 https://www.cnblogs.com/CloudMan6/p/7096731.html

 

5.user-defined模式

用戶自定義模式主要可選的有三種網絡驅動:bridge、overlay、macvlan。bridge驅動用於創建類似於前面提到的bridge網絡;overlay和macvlan驅動用於創建跨主機的網絡。

前面自定義的網絡模式  new_bridge  就是新網絡模式。另外兩個后面在驗證。

  

 

 docker的端口映射

docker的端口映射,能保證在外部網絡 訪問 同一設備上不同容器時候 不會因為端口問題產生沖突。

docker 可將容器對外提供服務的端口映射到 host 的某個端口,外網通過該端口訪問容器。容器啟動時通過-p參數映射端口:

可以使用-p參數顯式將一個或者一組端口從容器里綁定到宿主機上,而不僅僅是提供一個端口。注意這里是小寫的p,不是大寫。

因為該配置依賴於宿主機器,所以Dockerfile里沒有對應的指令,這是運行時才可用的配置。-p參數有幾種不同的格式:

ip:hostPort:containerPort| ip::containerPort | hostPort:containerPort | containerPort

 

 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM