1. 雲計算核心技術Docker教程:Docker使用網橋網路
【點擊右上角加'關注',全國產經信息不錯過】
就網路而言,網橋網路是在網段之間轉發流量的鏈路層設備。網橋可以是在主機內核中運行的硬體設備或軟體設備。
就Docker而言,網橋網路使用軟體網橋,該軟體網橋允許連接到同一網橋網路的容器進行通信,同時提供與未連接到該網橋網路的容器的隔離。Docker網橋驅動程序會自動在主機中安裝規則,以使不同網橋網路上的容器無法直接相互通信。
橋接網路適用於在同一Docker守護程序主機上運行的容器。為了在不同Docker守護程序主機上運行的容器之間進行通信,您可以在OS級別管理路由,也可以使用 覆蓋網路。
啟動Docker時,會自動創建一個默認的橋接網路(也稱為bridge),並且除非另有說明,否則新啟動的容器將連接到它。您還可以創建用戶定義的自定義網橋網路。用戶定義的網橋網路優於默認bridge 網路。
用戶定義的網橋和默認網橋之間的
用戶定義的網橋可在容器之間提供自動DNS解析。
預設橋接網路上的容器只能通過IP地址相互訪問,除非您使用被認為是傳統的--link選項。在用戶定義的網橋網路上,容器可以通過名稱或別名相互解析。
想像一個具有Web前端和資料庫後端的應用程序。如果調用容器web和db,則db無論應用程序堆棧在哪個Docker主機上運行,Web容器都可以在處連接到db容器。
如果在默認網橋網路上運行相同的應用程序堆棧,則需要在容器之間手動創建鏈接(使用舊式--link 標志)。這些鏈接需要雙向創建,因此您可以看到,要進行通信的容器要多於兩個,這會變得很復雜。或者,您可以操作/etc/hosts容器中的文件,但這會導致難以調試的問題。
用戶定義的網橋提供了更好的隔離性。
所有未--network指定的容器都將連接到默認網橋網路。這可能是一種風險,因為不相關的堆棧/服務/容器隨後能夠進行通信。
使用用戶定義的網路可提供作用域網路,其中只有連接到該網路的容器才能通信。
容器可以隨時隨地從用戶定義的網路連接和分離。
在容器的生命周期內,您可以即時將其與用戶定義的網路連接或斷開連接。要從默認橋接網路中刪除容器,您需要停止容器並使用其他網路選項重新創建它。
每個用戶定義的網路都會創建一個可配置的網橋。
如果您的容器使用默認的橋接網路,則可以對其進行配置,但是所有容器都使用相同的設置,例如MTU和iptables規則。另外,配置默認橋接網路發生在Docker本身之外,並且需要重新啟動Docker。
用戶定義的橋接網路是使用創建和配置的 docker network create。如果不同的應用程序組具有不同的網路要求,則可以在創建時分別配置每個用戶定義的網橋。
默認網橋網路上的鏈接容器共享環境變數。
最初,在兩個容器之間共享環境變數的唯一方法是使用--linkflag鏈接它們。用戶定義的網路無法進行這種類型的變數共享。但是,存在共享環境變數的高級方法。一些想法:
多個容器可以使用Docker卷掛載包含共享信息的文件或目錄。
使用可以一起啟動多個容器docker-compose,並且compose文件可以定義共享變數。
您可以使用群體服務來代替獨立容器,並利用共享機密和 配置。
連接到同一用戶定義網橋網路的容器可以有效地將所有埠彼此公開。為了使容器或不同網路上的非Docker主機可以訪問該埠,必須使用或 標志發布該埠。-p--publish
全國產經平台聯系電話:010-65367702,郵箱:[email protected],地址:北京市朝陽區金台西路2號人民日報社
2. Docker網路
Docker作為目前最火的輕量級容器技術,有很多令人稱道的功能,如Docker的鏡像管理。然而,Docker同樣有著很多不完善的地方,網路方面就是Docker比較薄弱的部分。因此,我們有必要深入了解Docker的網路知識,以滿足更高的網路需求。
安裝Docker時,它會自動創建三個網路,bridge(創建容器默認連接到此網路)、 none 、host
首先,要實現網路通信,機器需要至少一個網路介面(物理介面或虛擬介面)來收發數據包;此外,如果不同子網之間要進行通信,需要路由機制。
Docker 中的網路介面默認都是虛擬的介面。虛擬介面的優勢之一是轉發效率較高。 Linux 通過在內核中進行數據復制來實現虛擬介面之間的數據轉發,發送介面的發送緩存中的數據包被直接復制到接收介面的接收緩存中。對於本地系統和容器內系統看來就像是一個正常的乙太網卡,只是它不需要真正同外部網路設備通信,速度要快很多。
Docker 容器網路就利用了這項技術。它在本地主機和容器內分別創建一個虛擬介面,並讓它們彼此連通(這樣的一對介面叫做 veth pair)。
創建網路參數
Docker 創建一個容器的時候,會執行如下操作:
完成這些之後,容器就可以使用 eth0 虛擬網卡來連接其他容器和其他網路。
可以在 docker run 的時候通過 --net 參數來指定容器的網路配置,有4個可選值:
當你安裝Docker時,它會自動創建三個網路。你可以使用以下docker network ls命令列出這些網路:
Docker內置這三個網路,運行容器時,你可以使用該–network標志來指定容器應連接到哪些網路。
bridge網路代表docker0所有Docker安裝中存在的網路。除非你使用該docker run --network=選項指定,否則Docker守護程序默認將容器連接到此網路。
我們在使用docker run創建Docker容器時,可以用 --net 選項指定容器的網路模式,Docker可以有以下4種網路模式:
Docker 容器默認使用 bridge 模式的網路。其特點如下:
Host 模式並沒有為容器創建一個隔離的網路環境。而之所以稱之為host模式,是因為該模式下的 Docker 容器會和 host 宿主機共享同一個網路 namespace,故 Docker Container可以和宿主機一樣,使用宿主機的eth0,實現和外界的通信。換言之,Docker Container的 IP 地址即為宿主機 eth0 的 IP 地址。其特點包括:
Container 網路模式是 Docker 中一種較為特別的網路的模式。處於這個模式下的 Docker 容器會共享其他容器的網路環境,因此,至少這兩個容器之間不存在網路隔離,而這兩個容器又與宿主機以及除此之外其他的容器存在網路隔離。
網路模式為 none,即不為 Docker 容器構造任何網路環境。一旦Docker 容器採用了none 網路模式,那麼容器內部就只能使用loopback網路設備,不會再有其他的網路資源。Docker Container的none網路模式意味著不給該容器創建任何網路環境,容器只能使用127.0.0.1的本機網路。
自定義網路模式,docker提供了三種自定義網路驅動:
bridge驅動類似默認的bridge網路模式,但增加了一些新的功能,overlay和macvlan是用於創建跨主機網路。
建議使用自定義網橋來控制容器之間的相互通訊,還可以自動DNS解析容器名稱到ip地址。Docker提供了創建這些網路的默認網路驅動程序,你可以創建一個新的Bridge網路,Overlay或Macvlan網路,你可以創建一個網路插件或遠程網路進行完善的自定義和控制。
你可以根據需要創建任意數量的網路,並且可以在任何給定的時間將容器連接到這些網路中的零個或多個網路。此外,您可以連接並斷開網路中的容器,而無需重新啟動容器,當容器連接到多個網路時,其外部連接通過第一個非內部網路以詞法順序提供。
接下來介紹Docker的內置網路驅動程序。
使用自定義網路啟動容器
自定義網路好處:
參考:
https://blog.51cto.com/u_13362895/2130375
https://blog.csdn.net/meltsnow/article/details/94490994
https://blog.csdn.net/weixin_41842682/article/details/90417959