當前位置:
首頁 > 最新 > Docker 網路指南

Docker 網路指南

Docker的一個常見使用場景是網路服務,Docker有自己的網路模型,讓容器可以與外界通信。

最初,Docker容器必須通過手工設置網路,手動暴露給外部世界。當前的網路模型允許容器在相同的主機上(或者跨越不同的主機)自動找到彼此,並且以更受控制的方式暴露於全世界。

Docker為開發人員提供了四種用於容器網路的基本方式。前兩種bridge和overlay網路覆蓋了生產中最常見的使用情況。另外兩種主機和Macvlan網路覆蓋不太常見的情況。

Docker網路:橋接網路

橋接網路允許在同一個Docker主機上運行的容器相互通信。一個新的Docker實例帶有一個名為bridge的默認橋接網路,默認情況下所有新啟動的容器都連接到它。

橋接網路帶有許多方便的現成默認設置,但它們可能需要在生產中進行微調。例如,橋上的容器會自動將所有埠暴露給對方,但對外界無關。這對於需要測試容器之間的通信非常有用,但不適用於部署實時服務。

為獲得最佳效果,請創建自己的橋接網路。用戶定義的網橋具有默認bridge不具有的功能:

DNS解析可以在自定義橋上的容器之間自動工作。這樣,就不需要像使用默認橋時那樣使用原始IP地址進行通信。容器可以使用容器名稱通過DNS定位其他容器。

容器可以在運行時從定製橋上添加和移除。

環境變數可以在自定義橋上的容器之間共享。

總之,你開始可以使用默認橋調試容器,但對於任何嚴肅的生產工作,都需要創建自定義橋。

Docker網路:Overlay網路

Birdge網路適用於同一主機上的容器。Overlay網路適用於運行在不同主機上的容器,如swarm中的容器。這可以讓跨主機上的容器找到彼此並進行通信,而無需擔心如何為每個參與的容器配置。

Docker的swarm模式編排器會自動創建一個Overlay網路ingress。默認情況下,swarm上的任何服務都將自己附加到ingress。但是與默認橋相同,這不是生產系統的最佳選擇,因為默認值可能不合適。最好的辦法是創建一個自定義Overlay網路,不管有或沒有swarm,根據需要將節點連接到它。

如果你想使用一個Overlay網路,而這個網路中的容器不在swarm中運行,那麼這是創建自定義Overlay網路的另一個用例。請注意,Overlay網路上的每個Docker主機都必須具有適當埠才能看到它的對等端,並且不需要swarm模式,每個節點都需要訪問某種鍵值存儲。

另外請注意,Overlay網路默認只允許256個不同的IP地址。你可以提高這個限制,但是Docker建議使用多個Overlay。

Docker網路:主機網路(Host networking)

主機網路驅動程序允許容器將其網路堆棧與主機上的堆棧一起運行。主機網路中容器埠80上的Web伺服器可從主機本身的埠80獲得。

主機網路最大的好處是速度。如果需要提供容器埠訪問許可權,並且希望儘可能接近底層操作系統,那麼這就是要選的方法。 但這是以犧牲靈活性為代價的:如果將埠80映射到容器,則其他容器不能在該主機上使用這個埠。

Docker網路:Macvlan網路

Macvlan網路適用於直接與底層物理網路連接的應用程序,例如網路流量監控應用程序。 macvlan驅動程序不僅將IP地址分配給容器,而且還將物理MAC地址分配給容器。

請注意,這種類型的Docker網路有與使用虛擬機創建虛擬MAC地址時重複的風險。簡而言之,Macvlan應僅保留用於除非依賴物理網路地址才能工作的應用程序。

Docker網路:創建和管理網路

Docker中的所有網路管理均使用docker network命令完成。 它的許多子命令與其他Docker命令類似; 例如,docker network ls顯示當前Docker實例上的所有已配置網路:

$ docker network ls

NETWORK ID NAME DRIVER SCOPE

2e0adaa0ce4a bridge bridge local

0de3da43b973 host host local

724a28c6d86d none null local

要創建網路,請使用create子命令和--driver標誌來指示使用哪個驅動程序(bridge, overlay, macvlan):

Host-networked容器不需要為它們創建網路。相反,使用--network主機標誌啟動容器。 容器上的任何進程都會偵聽其預先配置的埠,因此請確保首先設置這些埠。

創建網路的選項還包括指定其子網,IP地址範圍和網關,這與使用其他方式創建網路的情況很相似。

容器在網橋上默認運行。要使用特定網路,只需在啟動容器時使用--network標誌並指定網路名稱即可。

還可以將正在運行的容器與網路配對:

$ docker network connect bridge my_container

將my_container附加到bridge,同時保留它已有的任何現有網路連接。

當一個容器關閉時,與其相關的任何網路都將保持不變。如果要手動刪除網路,可以使用docket network rm 命令執行此操作,或使用docker network prune刪除主機上不再使用的所有網路。

Docker網路和Kubernetes網路

如果你將Kubernetes視為一種編排解決方案,但已經將相當數量的工作投入到Docker網路設置中,聽到Docker和Kubernetes處理網路之間不存在一對一的對應關係,你將不會感到興奮。

詳細信息在Kubernetes文檔中進行了描述,但簡短的版本是關於如何分配和管理網路資源的基本模型。 因此,你需要為你的應用程序設計一個Kubernetes特定的網路設置。

一種可能的中間解決方案是使用與Docker自己的網路控制協同工作的Kubernetes容器網路介面(CNI)插件。但最好只是一個臨時解決方案; 在某些時候,你需要從內到外使用自己的網路來構建你的Kubernetes項目。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雲技術之家 的精彩文章:

為什麼 Kata 容器不會取代kubernets:關於 Kata 容器的自述
12個引領革命的Kubuernetes發行版

TAG:雲技術之家 |