Docker 之橋接網路 一

2021-10-03 06:23:10 字數 3169 閱讀 8348

參考:

在網路方面,橋接網路是乙個鏈路層裝置,它在網路段之間**流量。網橋可以是執行在主機核心中的硬體裝置或軟體裝置。

就docker而言,橋接網路使用軟體橋,允許連線到同一橋接網路的容器進行通訊,同時提供與沒有連線到橋接網路的容器的隔離。docker橋驅動程式自動在主機上安裝規則,這樣不同橋網路上的容器之間就不能直接通訊了。

橋接網路適用於執行在同一docker守護程序主機上的容器。對於執行在不同docker守護程序主機上的容器之間的通訊,您可以在作業系統級別管理路由,也可以使用覆蓋網路。

啟動docker時,將自動建立乙個預設的橋接網路(也稱為橋接),除非另外指定,否則新啟動的容器將連線到它。您還可以建立使用者定義的橋接網路。使用者定義的橋接網路優於預設的橋接網路。

1、使用者定義的橋提供容器之間的自動dns解析。

預設橋接網路上的容器只能通過ip位址互相訪問,除非使用 --link選項,它被認為是遺留的。在使用者定義的橋接網路中,容器可以通過 名稱或別名彼此解析。

設想乙個應用程式,它具有web前端和資料庫後端。如果您呼叫您的容器web和db, web容器可以在db上連線到db容器,不管應用程式堆疊執行在哪個docker上。

如果在預設網橋網路上執行相同的應用程式堆疊,則需要手動建立容器之間的鏈結(使用遺留的--link標誌)。這些鏈結需要在兩個方向上建立,所以您可以看到,如果有兩個以上的容器需要通訊,情況就會變得非常複雜。或者,您也可以在容器中操作/etc/hosts檔案,但是這會產生難以除錯的問題。

2、使用者定義的橋提供了更好的隔離。

所有沒有指定--network的容器都連線到預設的橋接網路。這可能是一種風險,因為不相關的棧/服務/容器可以進行通訊。

使用使用者定義的網路提供了範圍限定的網路,其中只有連線到該網路的容器才能通訊。

3、可以動態地從使用者定義的網路中附加和分離容器。

在容器的生命週期內,可以動態地將其與使用者定義的網路連線或斷開連線。要從預設網橋網路中刪除容器,需要停止容器並使用不同的網路選項重新建立它。

4、每個使用者定義的網路都建立乙個可配置的網橋。

如果您的容器使用預設的橋接網路,您可以配置它,但是所有的容器都使用相同的設定,比如mtu和iptables規則。另外,配置預設的橋接網路發生在docker本身之外,需要重新啟動docker。

使用docker network create建立和配置使用者定義的橋接網路。如果不同的應用程式組有不同的網路需求,您可以在建立每個使用者定義的橋接時分別配置它。

4、預設橋接網路上的鏈結容器共享環境變數。

最初,在兩個容器之間共享環境變數的惟一方法是使用--link 標誌將它們鏈結起來。這種型別的變數共享在使用者定義的網路中是不可能的。然而,有更好的方法來共享環境變數。幾個想法:

連線到同乙個使用者定義的橋接網路的容器可以有效地相互公開所有埠。要使乙個埠可被不同網路上的容器或非docker主機訪問,必須使用-p或--publish標誌發布該埠。

使用docker network  create 命令建立使用者定義的橋接網路

$ docker network create my-net
您可以指定子網、ip位址範圍、閘道器和其他選項。有關詳細資訊,請參閱 the docker network create reference or the output ofdocker network create --helpfor details.

使用docker network rm 命令刪除使用者定義的橋接網路。如果容器當前連線到網路,請首先斷開它們。

$ docker network rm my-net
當您建立或刪除使用者定義的橋接或連線或斷開使用者定義橋接的容器時,docker使用特定於作業系統的工具來管理底層網路基礎設施(例如新增或刪除橋接裝置或在linux上配置iptables規則)。這些細節應該考慮實現細節。讓docker為您管理使用者定義的網路。

建立新容器時,可以指定乙個或多個--network標誌。本例將nginx容器連線到my-net網路。它還將容器中的80埠發布到docker主機上的8080埠,以便外部客戶機可以訪問該埠。連線到my-net網路的任何其他容器都可以訪問my-nginx容器上的所有埠,反之亦然。

$ docker create --name my-nginx \

--network my-net \

--publish 8080:80 \

nginx:latest

要將正在執行的容器連線到現有的使用者定義橋,請使用docker network connect命令。下面的命令將乙個已經執行的my-nginx容器連線到乙個已經存在的my-net網路:

$ docker network connect my-net my-nginx
四、將容器從使用者定義的橋斷開

要從使用者定義的橋斷開正在執行的容器,請使用docker network disconnect命令。下面的命令從my-net網路斷開my-nginx容器。

$ docker network disconnect my-net my-nginx
五、使用ipv6

#use-ipv6

預設情況下,來自連線到預設橋接網路的容器的流量不會**到外部世界。要啟用**,您需要更改兩個設定。這些不是docker命令,它們影響docker主機的核心。

1、配置linux核心以允許ip**。

$ sysctl net.ipv4.conf.all.forwarding=1
2、將iptables**策略的策略從drop更改為accept。

$ sudo iptables -p forward accept
這些設定不會在重新啟動時持續存在,因此您可能需要將它們新增到啟動指令碼中。

預設的橋接網路被認為是docker的遺留細節,不建議在生產環境中使用。配置它是乙個手工操作,並且它有技術缺陷。

如果沒有使用--network標誌指定網路,而指定了網路驅動程式,則預設情況下容器將連線到預設網橋網路。連線到預設橋接網路的容器可以通訊,但只能通過ip位址進行通訊,除非它們使用遺留的--link 標誌進行鏈結。

要配置預設網橋網路,可以在daemon.json中指定選項。下面是乙個示例守護程序。指定了幾個選項的json。只指定需要自定義的設定。

重新啟動docker以使更改生效。

docker橋接網路。

1,安裝橋接相關的庫檔案 yum install bridge utils 2,修改網絡卡檔案 vi etc sysconfig network scripts ifcfg ens32 type ethernet bootproto none defroute yes ipv4 failure fa...

centos下docker網路橋接

停止服務 停止docker0網絡卡 ip link set dev docker0 down 刪除docker0 brctl delbr docker0 進入到網絡卡的配置檔案建立橋接網路br0 brctl addbr br0 設定為啟動狀態 ip link set dev br0 up 給br0配...

docker之網路橋接的兩種方式

第一種 直接敲命令方式配置 安裝網橋管理工具包 bridge utile yum install bridge utils y 1.先檢視ip 是否有br0 ip a 2.brctl show 3使用brctl命令刪除網橋br0 brctl delbr br0 4關閉br0 ifconfig br0...