中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker 配置網絡使用bridge網絡的方法

發布時間:2020-10-16 17:24:34 來源:腳本之家 閱讀:437 作者:kikajack 欄目:服務器

就網絡而言,橋接網絡(bridge network,也叫網橋)是一種鏈路層設備,用于轉發網段之間的流量。 bridge 可以是硬件設備或在主機內核中運行的軟件設備。

對 Docker 而言,橋接網絡使用允許容器連接到同一個橋接網絡來通信的軟件網橋,同時提供與未連接到該橋接網絡的容器的隔離。Docker bridge 驅動程序自動在主機中安裝規則使不同橋接網絡上的容器不能直接相互通信。

橋接網絡用于在同一個 Docker 守護進程上運行的容器通信。對于不同 Docker 守護進程的容器,可以在操作系統層級管理路由或使用 overlay 網絡來實現通信。

啟動 Docker 時,會自動創建默認的橋接網絡,新啟動的容器如果沒有特別指定都會連接到這個默認橋接網絡。也可以創建用戶自定義的橋接網絡,且用戶自定義的橋接網絡比默認的優先級要高。

1. 用戶自定義 bridge 和默認 bridge 的差別

1.1 用戶定義網橋提供更好的隔離和容器化應用之間的互操作性

連接到同一個用戶自定義網橋的容器會自動互相暴露所有端口,并且不會暴露到外部。這會讓容器化應用之間的通信更方便,而不會意外開放進入外部世界。

假設一個應用包含 web 前端和數據庫后端。外部需要訪問前端(可能是 80 端口),但是只有前端需要訪問數據庫后端。使用用戶自定義網橋,只需要將前端的端口暴露到外部,數據庫應用不需要開啟任何端口,因為 web 前端可以通過用戶自定義網橋直接訪問到。

如果在默認網橋上運行同一個應用堆棧,需要同時打開 web 前端和數據庫后端的端口,每次都需要使用 -p 或 --publish 標志。在意味著 Docker 主機需要通過其他方式來限制對數據庫后端端口的訪問。

1.2 用戶自定義 bridge 提供容器間自動 DNS 解析(automatic DNS resolution)

默認網橋上的容器只能通過 IP 地址互相訪問,除非你使用 --link 選項,這被認為是遺留的。在用戶自定義網橋中,容器之間可以通過名字會別名互相訪問。

這里還是用上面的例子分析,web 前端和數據庫后端。如果容器稱為 web 和 db,web 容器可以連接到 db 上的 db 容器(the web container can connect to the db container at db),不管這個應用堆棧運行在哪個 Docker 主機上。

如果在默認網橋上運行相同應用堆棧,需要人工創建容器之間的連接(使用遺留的 --link)標志。這些連接需要雙向創建,所以當需要通信的容器個數大于 2 個時復雜度會呈指數增長。或者,你可以編輯容器內的 /etc/hosts 文件,但這會產生難以調試的問題。

1.3 容器可以在運行中與用戶自定義網絡連接和斷開

在一個容器的生命周期中,可以在容器運行中將容器與用戶自定義網絡連接和斷開。要從默認網橋中移除容器,需要停止容器并且通過不同的網絡選項重新創建。

1.4 每個用戶自定義網絡創建一個可配置的橋

如果你的容器使用默認網橋,你可以配置它,但是所有容器都使用了相同設置,例如 MTU 和 iptables 規則。此外,對默認網橋的配置發生在 Docker 之外,需要重啟 Docker。

用戶自定義網橋通過 docker network create 來創建和配置。如果應用程序的不同分組有不同的網絡需求,可以獨立配置每個用戶自定義網橋,就像獨立創建一樣。

1.5 默認網橋中連接的容器共享環境變量

最初,在兩個容器之間共享環境變量的唯一方法是使用 --link 標志連接它們。用戶自定義網絡中無法使用這種類型的變量共享方式。然而,共享環境變量有更好的方式。一些想法:

  1. 多個容器可以使用 Docker volume 卷掛載用于共享信息的同一個文件或目錄。
  2. 可以通過 docker-compose 同時啟動多個容器,compose 文件可以定義共享變量。
  3. 可以使用 swarm 服務代替獨立的容器,可以利用 swarm 的共享的 secrets 和 configs。

連接到同一個用戶自定義網橋的容器可以有效地將所有端口暴露給對方。 要使不同網絡上的容器或非 Docker 主機訪問到容器的端口,該端口必須使用 -p 或 --publish 標志來發布。

2. 管理用戶自定義網橋

通過 docker network create 命令創建用戶自定義網橋:

$ docker network create my-net

可以指定子網 subnet,IP 地址段,網關和其他選項。查看 docker network create 命令參考手冊 或通過 docker network create --help 命令查看詳情。

通過 docker network rm 命令刪除用戶自定義的網橋。如果容器仍然連接到網絡,需要先斷開連接才能刪除這個網橋。

$ docker network rm my-net

到達發生了什么?

當你創建或刪除用戶自定義網橋,或將容器從用戶自定義網橋連接或斷開,Docker 使用特定于操作系統的工具來管理底層網絡架構(例如增刪網橋設備或配置 Linux 上的 iptables 規則)。這些是具體的實現細節。讓 Docker 替你管理你的用戶自定義網橋就好了。

3. 連接容器到用戶自定義網橋

創建新容器時可以指定一個或多個 --network 標志。下面的例子將 Nginx 容器連接到 my-net 網絡。同時還將容器的 80 端口發布到 Docker 主機的 8080 端口,這樣外部的客戶端就可以訪問這個端口了。任何其他連接到 my-net 的網絡的容器都可以訪問這個網絡中其他容器的所有端口,反之亦然。

$ 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

4. 斷開容器到用戶自定義網絡的連接

使用 docker network disconnect 命令斷開運行中的容器到一個用戶自定義網橋的連接。下面的命令將會斷開 my-nginx 容器到 my-net 網絡的連接:

$ docker network disconnect my-net my-nginx

5. 使用 IPv6

如果需要 Docker 容器支持 IPv6,則需要在創建任何 IPv6 網絡或為容器分配 IPv6 地址之前,在 Docker 守護進程中開啟選項 并重新加載配置。

創建網絡時指定 --ipv6 標志可以開啟 IPv6。默認網橋上不能有選擇地禁用 IPv6。

6. 開啟容器到外部的訪問

默認情況下,從容器發送到默認網橋的流量,并不會被轉發到外部。要開啟轉發,需要改變兩個設置。這些不是 Docker 命令,并且它們會影響 Docker 主機的內核。

配置 Linux 內核來允許 IP 轉發

$ sysctl net.ipv4.conf.all.forwarding=1

改變 iptables 的政策,FORWARD 政策從 DROP 變為 ACCEPT

$ sudo iptables -P FORWARD ACCEPT

這些設置在重新啟動時失效,因此可能需要將它們添加到啟動腳本中。

7. 使用默認網橋

默認橋接網絡被視為 Docker 的遺留細節,不建議用于生產用途。配置默認網橋是一個手動操作,并且它有技術上的缺點。

7.1 將容器連接到默認網橋

如果沒有通過 --network 標志聲明網絡,并且指定了網絡驅動程序,則默認情況下容器已連接到默認網橋。連接到默認橋接網絡的容器可以進行通信,但只能通過 IP 地址進行通信,除非它們使用遺留標志 --link 進行鏈接。

7.2 配置默認網橋

要配置默認網橋,需要在 daemon.json 配置文件中指定選項。下面的例子聲明了幾個選項。只需要在文件中指定需要自定義的設置。

{
 "bip": "192.168.1.5/24",
 "fixed-cidr": "192.168.1.5/25",
 "fixed-cidr-v6": "2001:db8::/64",
 "mtu": 1500,
 "default-gateway": "10.20.1.1",
 "default-gateway-v6": "2001:db8:abcd::89",
 "dns": ["10.20.1.2","10.20.1.3"]
}

重啟 Docker 使變更生效。

7.3 通過默認網橋使用 IPv6

如果 Docker 被配置為支持 IPv6(查看 使用 IPv6),則默認網橋會被自動配置為支持 IPv6。不像用戶自定義網橋,不能在默認網橋中選擇性的關閉 IPv6。

8. 后續步驟

通過獨立的網絡教程

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

枣庄市| 宁海县| 开封市| 噶尔县| 五台县| 白河县| 九寨沟县| 涟源市| 睢宁县| 额济纳旗| 措美县| 南阳市| 灯塔市| 谷城县| 两当县| 扬中市| 大渡口区| 灵石县| 昌乐县| 山阴县| 武宁县| 龙州县| 怀化市| 桑植县| 临朐县| 富源县| 铜梁县| 乐陵市| 福安市| 额济纳旗| 偏关县| 达孜县| 泸定县| 沈丘县| 潍坊市| 双城市| 米脂县| 济源市| 德令哈市| 彭山县| 英超|