一篇分析4大優勢:docker network create 指令的隔離性、自訂性、效能與安全性

喺2026年嘅容器化部署環境中,掌握 `docker network create` 指令已經成為DevOps工程師同開發者嘅必備技能。呢個指令唔單止係簡單咁建立一個網絡,更係實現容器高效、安全通訊嘅核心工具。本文將為你深度剖析使用 `docker network create` 嘅四大關鍵優勢:第一,佢提供咗強大嘅網絡隔離性,可以將唔同服務嘅容器分隔喺獨立網絡,避免不必要嘅幹擾同提升安全性;第二,擁有極高嘅自訂彈性,你可以根據應用需求,設定特定嘅子網、閘道、IP範圍同DNS選項,打造最貼合業務邏輯嘅網絡架構;第三,能夠顯著優化容器間嘅通訊效能,特別係透過建立用戶自定義嘅橋接網絡,相比預設嘅bridge網絡,容器可以透過容器名直接互相發現同連接,令服務發現更簡便快捷;第四,內置完善嘅安全配置選項,例如可以設定網絡層嘅加密選項,確保跨主機容器通訊(尤其係Overlay網絡)嘅資料傳輸安全。理解點樣靈活運用呢個指令,對於構建可擴展、易管理同高安全嘅微服務架構至關重要。
docker network create - Docker

AboutDockerProfessional illustrations

Docker network create 命令詳解

好喇,而家就同大家詳細拆解下 Docker network create 呢個命令。喺 2026 年嘅今日,無論你係管理緊複雜嘅微服務架構,定係簡單咁運行幾個獨立容器,識得點樣靈活運用呢個命令,絕對係掌握 Container 網絡溝通嘅核心關鍵。簡單嚟講,Docker network create 就係用嚟建立一個由你話事嘅 user-defined networks,等你可以完全控制個 Container 之間點樣連線、點樣隔離,而唔係下下用 Docker Engine 預設嗰套。

點解要特登自己建立網絡呢?最大嘅好處就係 network isolation 同更靈活嘅 container communication。當你喺 Docker CLI 打 docker network create my_network,Docker daemon 就會幫你起好一個全新嘅網絡環境。呢個環境同其他網絡,甚至係預設嘅 bridge network 係完全隔離嘅,入面嘅容器可以透過容器名直接互相訪問,唔使下下記住個 IP,對於多容器應用嚟講,管理上方便咗好多。背後嘅原理,其實係 Docker Engine 幫你建立咗一個 software bridge(類似預設嘅 docker0,但係獨立嘅),同埋相應嘅 veth 虛擬設備對,將容器接入呢個新橋,再配合 iptables 規則去做轉發同隔離,所有嘢都封裝喺獨立嘅 network namespace 裏面,安全又乾淨。

講到 network create 命令,最精髓嘅部分一定係揀啱個 network driver。呢個驅動程式決定咗個網絡嘅行為模式同能力,唔同場景要用唔同嘅策略,即係 network strategy。最基本嘅係 Bridge network,呢個係建立 user-defined networks 時嘅預設選擇。佢同系統預設嘅 bridge(即係 docker0)原理相似,但係功能更強,例如自動 DNS 解析。建立一個自定義嘅 bridge network 時,你可以好仔細咁設定 subnet configuration,例如 docker network create --subnet=172.20.0.0/16 --gateway=172.20.0.1 my_bridge,咁樣你就可以自己話事個 IP address allocation 範圍同網關,對於一啲對 IP 有固定要求嘅舊應用好有用。Bridge networks 最適合同一部主機上嘅多個容器需要互相溝通嘅場景。

如果要處理跨越多部 Docker 主機嘅容器通訊,咁就要出動 Overlay networks 喇。Overlay network 係實現跨主機容器網絡嘅魔法,特別係當你行緊 Swarm mode 去管理一個集群嘅時候。當你建立一個 overlay networkDocker 會喺唔同主機嘅網絡之上,再建立一個虛擬嘅網絡層,等唔同主機上嘅容器好似喺同一個本地網絡一樣直接對話。建立命令會係類似 docker network create -d overlay --attachable my_overlay_net。呢種方式對於分散式應用同微服務架構至關重要,因為服務可以部署喺集群中任何一部機,而溝通完全無障礙。

至於 MacvlanIPvlan 呢兩種 network drivers,就係將容器直接暴露喺實體網絡嘅方案,等容器攞到同宿主機同一個網段嘅真 IP 地址。Macvlan networks 會為每個容器分配一個獨一無二嘅 MAC 地址,喺網絡上看起來就係一部獨立實體設備。而 IPvlan 就係共用宿主機網絡接口嘅 MAC 地址,但係用唔同嘅 IP。呢兩種方式適合嗰啲需要直接暴露服務,或者要同網絡內其他非容器設備(例如公司內網嘅打印機或者 NAS)直接通訊嘅高級場景。不過設定時要小心 subnet configuration,避免 IP 衝突,同埋要確保你嘅網絡設備(例如交換機)支援先得。

建立好網絡之後,點樣知道佢嘅詳細設定呢?呢個時候就要用 docker network inspect [網絡名] 呢個命令喇。network inspect 可以話係你嘅診斷神器,佢會顯示晒個網絡嘅所有細節,包括用緊咩驅動程式、個 subnetgateway 係咩、連接咗邊啲容器、每個容器攞到嘅 IP 地址(即係 IP address management 狀況),仲有相關嘅 network namespace 資訊等等。當你遇到容器連線問題,第一時間就應該用呢個命令去檢查下網絡配置係咪同你預期一樣。

總括嚟講,Docker network create 絕對唔係一個簡單嘅「建立網絡」指令咁簡單,佢係你設計整個容器化應用 container networking 藍圖嘅第一步。由選擇合適嘅 network driversBridge, Overlay, Macvlan, IPvlan),到精細嘅 subnet configurationIP address allocation,每一步都影響緊應用程式嘅性能、安全性同可擴展性。理解清楚每種網絡類型嘅原理同適用場景,你先至能夠喺 2026 年呢個容器技術更加成熟嘅環境下,打造出既穩陣又高效嘅部署架構。

docker network create - Container

AboutContainerProfessional illustrations

點解要用自訂網絡?

好啦,講到Docker,好多人都識用docker run就開個Container,但係咪淨係用Docker Engine預設嗰個bridge network就夠呢?答案係「唔夠」!所以今次我哋就要深入講下,點解要用自訂網絡。簡單嚟講,用Docker CLI自己network create一個user-defined networks,唔單止係為咗個Container有個IP咁簡單,而係關乎到network isolation(網絡隔離)、安全、同埋Container之間點樣溝通(container communication)嘅大問題。

首先,你要明白當你安裝完Docker,佢已經有個預設嘅Bridge network(通常叫bridge),所有冇特別指定網絡嘅Container都會自動連上去。呢個預設網絡背後係由個docker0呢個software bridgeiptables規則撐住,幫你做好IP address allocation。聽落好似好方便,但問題就嚟啦:所有連去呢個預設bridge嘅Container,雖然有自己嘅IP,但係佢哋嘅網絡隔離係好弱嘅。點解咁講?因為佢哋之間嘅通訊,主要係靠IP地址,即係你要記住對方個Internal IP先可以連到過去,而且Docker Engine係唔會幫你做服務發現(Service Discovery)嘅,即係冇得用Container名當Hostname咁直接Ping到。呢個設計對於開發或者測試一兩個Container可能冇所謂,但當你開始行多個Container組成一個應用(例如一個Web App連一個Database),管理呢堆IP就會變得好麻煩。

咁自訂網絡可以點幫手?當你用docker network create命令,揀返合適嘅network driver(例如Bridge networkOverlay networksMacvlan networks等)去建立一個自己定義嘅網絡時,你即刻就獲得咗幾個強大功能。第一,自動嘅服務發現。喺同一個user-defined network裏面嘅Container,可以直接用對方個Container名或者網絡別名(alias)嚟互相溝通,完全唔使記IP。例如你個Web Server Container叫webapp,Database叫db,咁你喺Web App嘅設定檔裏面,直接寫db做Hostname就得,Docker嘅內置DNS會自動解析到正確嘅IP。呢個對於container communication嚟講,方便咗十倍都不止。

第二,就係更強嘅網絡隔離。想像下,你公司有兩個Project,Project A同Project B,各自有一組Container。如果你將佢哋全部掟落預設嗰個大鍋粥(預設bridge)裏面,理論上Project A嘅Container可以嘗試掃描同連接Project B嘅Container嘅Port,呢個就係安全風險。但係如果你用自訂網絡,為Project A同Project B分別建立兩個獨立嘅Bridge network,咁佢哋嘅network namespace就完全隔離咗。Project A嘅Container根本唔會見到Project B嘅Container存在,呢種邏輯上嘅隔離對於多應用程式部署、或者區分開發/測試環境係非常重要。呢個隔離性正正就係Docker network isolation設計嘅核心價值。

第三,係關於網絡驅動程式(network drivers)嘅靈活性同進階功能。預設網絡只係一個簡單嘅bridge network,但係自訂網絡俾你按需要揀唔同嘅Driver,去應付唔同場景。例如: Bridge networks:最常用,就係上面講到嘅自定義橋接網絡,適合單一Docker主機(Docker daemon)上嘅多個Container需要互通嘅情況。你可以精細控制個子網網關subnet configuration),唔使同人逼喺預設嘅172.17.0.0/16裏面。 Overlay networks:呢個就勁啦,當你行Swarm mode(集群模式)嘅時候,你要啲Container喺唔同嘅物理主機上面都可以好似喺同一個網絡裏面直接通訊,就要靠overlay network。佢會喺主機之間建立一個虛擬網絡,封裝(encapsulate)數據包,等你可以輕鬆建立分散式應用。 Macvlan 同 IPvlan networks:呢兩個Driver就更加「貼地」。佢哋可以俾你個Container直接攞到同主機物理網絡一樣段嘅IP地址,好似一個獨立物理機咁出現喺你公司嘅LAN裏面。Macvlan會為每個Container分配獨特嘅MAC地址,而IPvlan就共享一個MAC但用唔同IP。呢個對於要繼承現有網絡策略,或者要Container直接對外提供服務(而唔使經過主機Port映射)嘅場景非常有用。

最後,自訂網絡帶嚟嘅係管理上嘅清晰同可預測性。你可以用docker network inspect命令去詳細睇到個網絡嘅配置,包括連接咗邊啲Container、個subnet configuration係點、IP address management嘅情況等。你可以為唔同嘅應用、唔同嘅環境(Staging, Production)建立有明確命名嘅網絡,成個network strategy即刻清晰晒。相反,依賴單一預設網絡,所有嘢都堆埋一齊,日子一久就好難管理同追溯。

總括嚟講,用自訂網絡唔係「高階玩家」先要做嘅事,而係用好Docker container networking嘅基本步。佢解決咗預設網絡喺服務發現、隔離性、同功能彈性上嘅不足。無論你係想簡單咁令幾個Container可以用名互相呼叫,定係要規劃一個複雜嘅多主機Swarm mode部署,識得運用docker network create同各種network drivers,都係你必須掌握嘅技能。下次開Container前,花多幾秒諗下用咩網絡,長遠嚟講會幫你省返大量除錯同維護嘅時間。

docker network create - Docker

AboutDockerProfessional illustrations

2026年最新語法教學

好啦,各位IT老友,而家就同大家深入拆解下2026年最新嘅 Docker network create 語法教學。喺呢幾年,Docker Engine 嘅網絡功能愈來愈成熟,尤其係喺複雜嘅微服務同混合雲部署入面,識得靈活運用唔同嘅 network driver 真係好關鍵。最基本嘅指令格式當然係 docker network create,但係背後嘅選項(options)就多咗好多花臣,可以幫你精準設定 subnet configuration網關、甚至係IP地址管理策略。

首先,我哋由最常用、最傳統嘅 Bridge network 講起。喺2026年,你建立一個自定義嘅 Bridge network,已經唔再依賴舊時嘅 docker0 呢個預設 software bridge。你可以用一條指令就搞掂晒 子網網關 設定,例如話你想建立一個專屬嘅網絡俾你嘅應用程式,確保 network isolation,你可以好仔細咁指定CIDR區段。咁樣做嘅好處係,你嘅 Container 之間嘅 container communication 會更加安全同有預測性,而且可以避免同宿主機或者其他網絡撞IP。另外,而家嘅 Docker CLI 亦都加強咗同 iptables 規則嘅整合,當你建立網絡時,背後嘅防火牆規則會自動設定得更加貼合現代安全要求。

講到進階啲,如果你係用緊 Swarm mode 去做叢集管理,咁 Overlay networks 就係你必須要識嘅嘢。2026年嘅 overlay network 語法更加強調易用性同跨主機連通性。當你喺Swarm manager節點度執行建立指令時,個網絡會自動同步到成個叢集,入面嘅 Container 無論被調度到邊部主機,都可以直接透過個 overlay network 互相通訊,好似喺同一個區域網絡入面一樣。呢個過程背後其實係靠 veth 配對同 network namespace 技術去實現隔離同連接,但而家 Docker daemon 幫你處理晒,你只需要專注喺定義個網絡本身。建立時,你仲可以設定加密選項,確保節點之間嘅數據傳輸係安全嘅。

對於一啲追求極致性能或者需要 Container 直接暴露喺實體網絡嘅場景,MacvlanIPvlan 呢兩種 network drivers 就大派用場。2026年嘅語法對呢方面嘅支援更加直觀。例如用 Macvlan network,你可以直接指派一個實體網絡介面(例如eth0)俾個網絡,然後你嘅容器就會獲得一個同宿主機同網段嘅、真實嘅MAC地址同IP地址,對於需要直接響應ARP請求嘅傳統應用好有用。而 IPvlan 就更加靈活,可以喺單一個實體介面上創建多個子介面,共用同一個MAC地址但就有唔同嘅IP,對於 IP address management 比較嚴格嘅環境係一個好選擇。建立呢類網絡時,你一定要清楚指定 parent interface 同 subnet,唔係就好易同宿主機網絡撞到亂晒籠。

最後,點可以唔提下點樣管理同檢查呢啲 user-defined networks 呢?除咗 network createnetwork inspect 指令喺2026年嘅輸出資訊都豐富咗好多,可以幫你一眼睇晒個網絡嘅詳細設定、連接咗嘅容器、同埋所用嘅 network strategy。總括嚟講,無論你係想建立簡單嘅 Bridge networks 做本地開發測試,定係建立複雜嘅 overlay network 去支援全球部署,2026年嘅 Docker 網絡命令都已經變得好強大同易用。緊記,喺建立任何網絡之前,最好先規劃好你嘅 IP address allocation 方案同 subnet configuration,咁先可以避免之後出現網絡衝突或者連接問題,令到你嘅容器化應用行得更加順暢。

docker network create - overlay

AboutoverlayProfessional illustrations

基本指令格式拆解

好啦,而家我哋就嚟拆解下 docker network create 呢個指令嘅基本格式。好多朋友初初接觸 Docker CLI 嗰陣,見到一抽參數可能會有啲迷茫,但其實拆開嚟睇,佢嘅結構好清晰,主要就係「指令」、「網絡驅動程式(network driver)」同埋一堆「選項(options)」嘅組合。最基本嘅格式就係:docker network create [OPTIONS] NETWORK_NAME。個 NETWORK_NAME 就係你自己俾個網絡起嘅名,方便之後管理,例如 my_app_backend 或者 database_network 咁,呢個係必須要嘅。

咁重點就落喺 [OPTIONS] 呢部分啦,呢度就係你定義個網絡特性嘅地方。最核心嘅一個 option 就係 --driver,或者簡寫 -d。呢個就係指定你用邊種 network driver。Docker Engine 內置咗幾種主要嘅驅動程式,每種都有唔同嘅用途。最常用嘅係 bridge network,佢係預設嘅驅動程式,如果你唔指定,Docker daemon 就會自動用佢。Bridge network 會喺你部主機內部建立一個軟件橋接(software bridge),同預設嘅 docker0 橋係分開嘅,咁樣可以做到更好嘅 network isolation。每個 Container 接入呢個自定義橋網絡之後,會自動分配 IP,而且可以透過容器名互相溝通,好方便。

如果你想喺唔同主機上面嘅容器之間建立網絡,咁你就要用到 overlay network 啦。呢個驅動程式係為 Swarm mode 而設嘅,可以讓一個 Swarm 集群入面,唔同節點上嘅服務(service)容器好似喺同一個網絡入面咁直接通訊。建立 overlay networks 嗰陣,Docker 會自動幫你處理晒底層嘅 VXLAN 隧道之類嘅複雜嘢。至於 MacvlanIPvlan 呢兩種驅動程式,就比較進階,佢哋可以讓你嘅容器直接攞到同主機物理網絡同一個網段嘅 IP 地址,好似一部獨立物理機咁出現喺網絡入面,適合一啲對網絡性能或者 legacy 應用有要求嘅場景。

講完驅動程式,另一個重要嘅 option 就係 --subnet、--gateway 同 --ip-range。呢啲就係用嚟做手動嘅 IP address management。好多時,特別係喺生產環境或者有特定網絡規劃嘅時候,你唔會想 Docker 用佢預設嘅 172.17.0.0/16 呢類 子網,因為可能會同你公司內部網絡撞咗。你可以用 --subnet 192.168.100.0/24 咁樣,明確指定個網絡用咩網段。--gateway 就係指定呢個子網嘅閘道地址,通常就係子網嘅第一個 IP,例如 192.168.100.1。而 --ip-range 就更加細緻,可以喺一個大子網裡面劃出一個細啲嘅範圍專俾 Docker 用,例如 --subnet 192.168.200.0/24 --ip-range 192.168.200.32/28,咁樣 Docker 就只會喺 192.168.200.32 到 192.168.200.47 呢個細池裡面派 IP,其他地址可以留返做其他用途。

跟住落嚟,仲有幾個實用 option 值得講下。例如 --internal,呢個係用嚟建立一個內部網絡,接入呢個網絡嘅容器可以互相訪問,但就完全冇辦法連出外網,對於一啲純內部服務(例如數據庫)嘅安全隔離好有用。另外有 --attachable,呢個 option 對於 overlay network 特別重要。默認情況下,Swarm 嘅 overlay 網絡只可以俾 Swarm 服務(service)用,但如果你加咗 --attachable,咁普通嘅 docker run 容器都可以手動接入呢個 overlay 網絡,彈性就大好多啦。

最後,點可以唔提下點樣驗證同檢查你建立嘅網絡呢?雖然唔係 create 指令一部分,但建立完之後,你一定要識用 docker network inspect [NETWORK_NAME] 呢個 network commands 去睇清楚個網絡嘅詳細配置。佢會顯示晒個網絡用咩驅動程式、個 子網網關 係咩、有咩容器接咗入嚟、每個容器攞到咩 IP,甚至背後嘅 network namespaceveth 接口配對資訊都會有。呢個係你診斷 container communication 問題嘅必備工具。記住,建立網絡唔係 set 完就算,一定要 inspect 下確認係咪同你預期一樣,特別係當你手動設定咗 subnet configuration 嘅時候,避免因為打錯 IP 而導致成個網絡策略(network strategy)失效。

總括嚟講,docker network create 嘅指令格式拆解開,就係一個「選擇合適驅動程式」加「精細化配置選項」嘅過程。由最簡單嘅 docker network create my_bridge,到複雜嘅 docker network create -d overlay --subnet 10.1.0.0/16 --attachable my_swarm_net,都係圍繞住呢個核心。理解清楚每個 option 背後對應嘅 container networking 概念,好似 bridge networks 點樣透過 iptables 做 NAT、overlay network 點樣打通唔同主機,你自然就知道點樣設計同建立最符合你應用場景嘅 user-defined networks 啦。

docker network create - network

AboutnetworkProfessional illustrations

橋接網絡設定實戰

好啦,而家我哋就嚟真槍實彈,講下點樣實際設定同管理 Bridge network。喺 Docker 嘅世界入面,bridge network 絕對係最常用、最核心嘅 network driver,尤其係當你啲 Container 需要互相溝通,但又唔想直接暴露喺 host network 嘅時候。預設嗰個 docker0 software bridge 雖然方便,但限制多多,所以識得自己建立 user-defined networks 先至係高手。

首先,最基本嘅動作就係用 Docker CLI 嘅 docker network create 指令。例如,你想建立一個叫做 my_app_bridge 嘅網絡,好簡單,打 docker network create my_app_bridge 就得。咁樣 Docker Engine 就會自動幫你搞掂背後嘅 software bridge、分配好 子網網關。不過,實戰點會咁簡單?我哋通常要自訂設定,例如指定 IP 地址管理 嘅範圍。你可以用 --subnet 同 --gateway 參數,好似 docker network create --driver bridge --subnet 172.20.0.0/16 --gateway 172.20.0.1 my_custom_bridge。咁樣做嘅好處係,你可以清晰規劃你嘅 container networking,避免同公司內網或者其他網絡撞 IP,管理起嚟一目了然。

建立好網絡之後,點樣用呢?當你運行一個新 Container 嘅時候,用 --network 參數指定番就得,例如 docker run -d --name web_app --network my_custom_bridge nginx。咁樣,個 web_app container 就會從 172.20.0.0/16 呢個 子網 度自動攞到一個 IP,而且可以同連接喺同一個 user-defined networks 下面嘅其他 container 直接透過容器名互相通訊,呢個就係 bridge network 提供嘅 container communication 同埋 network isolation 好處。想睇清楚個網絡嘅詳細設定?用 docker network inspect my_custom_bridge,裏面會列出所有連接嘅容器、佢哋嘅 IP、個網絡嘅 子網網關 資訊,對於排查連線問題好有用。

講到深入少少,你要明白 bridge network 背後嘅魔法。當你建立一個 user-defined bridgeDocker daemon 其實做咗好多功夫:佢會創建一個新嘅 network namespace,設定一個 Linux software bridge(唔係 docker0 嗰個),然後透過一對虛擬以太網卡(veth)將個容器連接到呢個橋上。所有嘅 IP address allocation 同路由都會經呢度處理。更重要嘅係,Docker 會自動幫你設定好 iptables 規則,嚟處理容器對外(例如上網)同埋端口映射(-p 8080:80)嘅網絡地址轉換(NAT)。呢啲都係 Docker Engine 為我哋簡化咗嘅複雜 network strategy

最後提多個實戰小貼士。點解要用 user-definedBridge networks 而唔用預設?除咗可以自訂 subnet configuration,最重要係佢提供咗更好嘅 network isolation。連接喺同一個自定義橋接網絡嘅容器,可以透過容器名直接互相發現同通訊,呢個係預設 docker0 橋做唔到嘅(預設橋要用 --link,但呢個功能已經被標籤為遺留唔建議用)。另外,自定義網絡亦更容易管理,你可以隨時將容器加入或離開某個網絡,實現更靈活嘅應用程式分段。例如,你可以將你嘅前端服務容器同資料庫容器放喺同一個自定義橋接網絡,然後將另一個後端服務放喺第二個橋接網絡,咁樣就可以喺 container networking 層面做好基本嘅安全隔離。記住,雖然 overlay networkMacvlan networks 喺跨主機或者需要直接獲取物理網絡 IP 嘅場景好強大,但對於單一主機上嘅大多數應用程式堆疊,一個設定得宜嘅 Bridge network 已經係最實用同高效嘅選擇。

docker network create - Macvlan

AboutMacvlanProfessional illustrations

Overlay網絡跨主機連接

講到Overlay網絡跨主機連接,呢個真係Docker喺多主機環境下嘅殺手鐧,尤其係當你玩緊Swarm mode或者需要喺唔同物理機、甚至唔同數據中心嘅Container之間建立無縫溝通嗰陣。簡單啲講,Overlay network就係喺現有嘅網絡(例如你公司嘅數據中心網絡或者雲服務供應商嘅網絡)之上,再建立一個虛擬嘅網絡層。呢個虛擬網絡會將唔同主機上面嘅Docker Engine連接埋一齊,令到佢哋上面嘅Container,就算唔喺同一部實體機,都可以好似喺同一個私密區域網(LAN)裏面咁直接通訊,完全唔使擔心複雜嘅底層網絡設定。

點解要用Overlay network而唔用Bridge network呢?呢個係好多香港嘅DevOps新手都會問嘅問題。Bridge network(即係Docker入面預設嗰種或者你自己用docker network create整嘅user-defined bridge)好處係簡單易用,但佢嘅局限就係只可以喺同一部主機(即係同一個Docker daemon管理下)嘅Container之間互通。一旦你個服務要Scale out,要將Container分散到幾部唔同嘅伺服器,Bridge network就即刻唔夠用。呢個時候,Overlay network driver就出場喇。佢嘅核心原理係透過封裝(Encapsulation)技術,將Container之間嘅數據包(例如TCP/IP包)外面再包多一層,然後透過底層嘅IP網絡(即係你啲主機本身嘅網絡)傳送去目的地主機,再由嗰邊嘅Docker Engine解封裝,交返俾目標Container。呢個過程對於Container嚟講係完全透明嘅,佢哋只會覺得大家嘅IP地址都喺同一個子網入面,好方便。

要成功建立Overlay networks,有幾個前提條件你一定要搞掂。首先,你嘅Docker環境必須要配置好Swarm mode。冇錯,雖然Overlay網絡係跨主機連接嘅關鍵,但佢本身嘅管理同協調依賴Docker Swarm提供嘅控制平面。你需要將你嘅主機初始化為Swarm manager或者加入做Swarm worker。Swarm會負責管理Overlay網絡嘅狀態同步、IP地址分配(IP address allocation)同埋加密金鑰等等。其次,你啲主機之間嘅網絡必須要互通,通常需要開放幾個特定嘅端口(例如TCP/2377用於集群管理,TCP/UDP 7946用於節點發現,同埋UDP 4789用於Overlay網絡數據嘅VXLAN封裝傳輸)。搞掂呢啲基礎設定,你先可以用Docker CLI,例如docker network create -d overlay my-overlay-net,去創建一個屬於你自己嘅Overlay網絡。

創建好Overlay網絡之後,當你喺唔同主機上部署服務(Service)或者獨立容器(Container)並連接到呢個網絡時,Docker就會自動幫你處理好所有複雜嘅網絡配置。每部主機上面嘅Docker Engine都會為呢個Overlay網絡維護一個軟件網橋(software bridge),同埋一堆虛擬網絡設備(veth pair)連接返去每個Container嘅network namespace。更重要嘅係,Docker會透過內置嘅IP地址管理(IP address management)系統,從你定義嘅子網(subnet configuration)裏面,自動分派IP地址俾每一個連接到Overlay網絡嘅Container,並且設定好相應嘅網關(gateway)。呢個過程完全自動化,你唔使好似以前咁逐部機去手動配置IP同路由表,慳返好多時間同避免人手出錯。

舉個實際例子俾你諗下:假設你喺AWS有兩部EC2主機,一部喺香港區域,一部喺新加坡區域,兩部都加入咗同一個Docker Swarm集群。你創建咗一個名叫prod-overlay嘅Overlay網絡,子網設定為10.10.0.0/16。然後你喺香港部機上面部署一個叫web-api嘅服務容器,連接到prod-overlay網絡,Docker分咗10.10.0.5俾佢。跟住,你喺新加坡部機上面部署一個叫database嘅服務容器,同樣連接到prod-overlay網絡,分到10.10.0.6。咁樣,個web-api容器就可以直接用10.10.0.6呢個IP地址去訪問個database容器,中間所有嘅數據傳輸都會被自動加密同封裝,安全地穿越互聯網。呢種跨地域嘅Container communication,如果冇Overlay network driver幫手,你自己要設定VPN或者專線,真係搞到頭都大。

當然,Overlay網絡唔係萬能,佢都有啲嘢要考慮。首先,因為多咗一層封裝,網絡性能(Latency同Throughput)會比同機嘅Bridge network或者Host network稍微差少少,呢個係用便利性換取嘅輕微代價,但對於大部分分散式應用嚟講完全可以接受。其次,網絡隔離(network isolation)方面,Overlay網絡本身提供咗一個獨立嘅空間,但你要記住,Swarm mode下嘅服務發現同負載均衡係另一層嘅事。另外,除咗Overlay,Docker仲有其他network driver可以處理跨主機場景,例如Macvlan同IPvlan。Macvlan networks可以直接俾個Container一個看起來同實體機同級嘅MAC地址,等佢直接接入你嘅物理網絡,適合需要直接暴露嘅高性能場景。但係Macvlan對網絡設備有要求,而且管理上冇Overlay咁靈活同自包含。所以點樣揀,真係要睇你實際嘅network strategy同環境限制。

總括嚟講,掌握docker network create命令去建立Overlay網絡,係你玩轉現代容器化架構、特別是微服務同分散式系統嘅必備技能。佢將複雜嘅跨主機網絡配置抽象化,讓你專注喺應用邏輯本身,而唔使成日煩惱底層嘅路由同防火牆規則(當然,基礎嘅iptables同網絡安全概念你仍然要識)。下次當你規劃一個需要橫向擴展、高可用嘅服務時,記得將Overlay networks放入你嘅設計藍圖入面,佢絕對係實現無縫跨主機連接嘅強大工具。

docker network create - IPvlan

AboutIPvlanProfessional illustrations

Macvlan直接連實體網絡

講到 Macvlan 直接連實體網絡,呢個功能真係 Docker 網絡驅動程式(network driver)裡面一個幾犀利嘅設定,尤其適合香港嘅開發者或者系統管理員,當你啲容器(Container)需要一個好似實體機咁樣、擁有自己 MAC 地址同直接喺實體網絡(Physical Network)上面出現嘅 IP 地址嘅時候。簡單啲講,用 Macvlan network driver 創建嘅網絡,會令到你個 Docker Container 跳過晒 Docker Engine 入面嗰層軟件橋接(software bridge,即係預設嗰個 docker0),直接同你公司或者數據中心嘅實體網絡卡(NIC)掛鈎。咁樣個容器攞到嘅 IP,就會同你部伺服器(Host)嘅 IP 同屬一個子網(subnet),其他網絡設備會當呢個容器係一部獨立嘅實體主機,網絡隔離(network isolation)嘅方式同 bridge network 完全唔同。

點解要咁做?想像一下你喺公司內部部署一啲服務,例如係監控系統、舊式嘅網絡應用,或者係一啲需要直接響應 ARP 請求嘅設備模擬。如果你用 Docker 預設嘅 Bridge network 或者係用嚟做集群嘅 overlay network,個容器嘅流量會經過宿主機嘅 Docker daemon 同 iptables 做 NAT 同轉發,對於某啲嚴格嘅網絡策略或者需要直接路由嘅場合,可能會遇到問題。Macvlan 就解決咗呢個痛點,佢通過將一個實體網絡接口(例如 eth0)劃分成多個虛擬嘅子接口(sub-interface),每個子接口可以分配俾一個容器專用,並且擁有獨一無二嘅 MAC 地址。呢個過程完全喺 Linux kernel 嘅 network namespace 層面實現,所以效率非常高,幾乎冇額外開銷。

要設置 Macvlan,你首先要用 Docker CLI 嘅 docker network create 命令,並且指定 driver 係 macvlan。呢度有幾個關鍵參數你一定要搞清楚:個 parent 參數,就係指定你用宿主機邊一張實體網卡嚟做連接;subnetgateway 就係你實體網絡嘅配置,一定要準確,唔係嘅話個容器會上唔到網或者同外界失聯。例如你公司內網係 192.168.1.0/24,網關係 192.168.1.1,你就要照樣填落去。值得注意嘅係,當你個容器用 Macvlan 攞咗一個實體網絡 IP,宿主機本身反而唔能夠同個容器直接通過呢個 IP 通訊(因為佢哋而家喺同一個二層網絡,但宿主機個 IP 同容器 IP 都掛喺同一張物理卡上,Linux 默認唔允許咁樣),呢個係 Macvlan 一個常見嘅「陷阱」。要解決呢個問題,你可能需要喺宿主機額外創建一個 Macvlan 子接口並分配 IP,或者透過另一個網絡接口(例如 docker0 橋接網絡)嚟同容器溝通。

同其他網絡模式比較下,Bridge network 係將容器連去一個內部軟件橋(即係 docker0),然後通過宿主機 IP 做 NAT 出去;Host network 就直頭廢除容器嘅網絡隔離,共用宿主機網絡命名空間;而 Overlay networks 就主要用喺 Docker Swarm mode,等唔同主機上面嘅容器可以跨網絡溝通。Macvlan 嘅定位好清晰:就係要容器成為實體網絡嘅「一等公民」。佢對於 IP address management(IPAM)嘅要求好嚴格,因為你係直接喺實體網絡攞 IP,所以一定要確保唔好同現有設備撞 IP,你可以用 Docker 內置嘅 IPAM 驅動程式去設定固定 IP 池,避免衝突。

最後提多個進階話題,就係 Macvlan 有個兄弟叫 IPvlan,佢嘅概念類似,但係多個容器可以共享同一個 MAC 地址,只用唔同嘅 IP 地址來區分,對於某啲對 MAC 地址數量有限制嘅網絡環境(例如某啲雲服務供應商)可能會更適合。總括來講,Macvlan 直接連實體網絡係一個非常強大嘅容器網絡方案,特別適合需要低延遲、直接二層網絡存取、或者要兼容傳統網絡服務嘅場景。不過,權力越大責任越大,用佢之前一定要同你嘅網絡管理員溝通好,規劃好子網同 IP 地址分配(subnet configuration),唔係好容易搞到網絡大亂。用 docker network inspect 命令可以好詳細咁查看你創建好嘅 Macvlan 網絡配置,確保所有設定都符合你嘅預期同公司嘅網絡策略(network strategy)。

docker network create - Swarm

AboutSwarmProfessional illustrations

點樣設定網絡驅動程式?

好啦,講到點樣設定網絡驅動程式,其實就係用 docker network create 呢個命令,再加埋 --driver(或者簡寫 -d)呢個選項咁簡單。不過,揀啱驅動程式同埋識得配置相關參數先係精髓所在。喺 Docker Engine 入面,預設有幾種唔同嘅 network driver 俾你揀,每種都有佢特定嘅用途同設定方法,等我哋逐個拆解下。

首先,最常用嘅一定係 Bridge network。當你唔特別指定嘅時候,Docker 就會用 bridge 呢個驅動程式。佢嘅原理係喺你部主機入面,透過 Docker daemon 建立一個 software bridge(預設叫 docker0),然後每個 Container 會透過一對虛擬網絡接口(veth)連去呢個橋度,形成一個私有嘅網絡。咁樣做嘅好處係可以做到 network isolation,同主機網絡隔開,但又方便 container communication。點樣建立一個自定義嘅橋網絡呢?好簡單,打開終端機,用 Docker CLI 打 docker network create --driver bridge my_bridge_net 就得。你仲可以進一步設定 子網網關,例如 docker network create -d bridge --subnet 172.20.0.0/16 --gateway 172.20.0.1 my_custom_bridge。建立咗之後,你 run container 嘅時候用 --network my_bridge_net 就可以將個容器接入去呢個自定義網絡啦。呢類 user-defined networks 比起預設個 bridge 好處多啲,例如支援自動 DNS 解析,容器之間可以直接用名嚟互通。

如果你嘅應用需要跨越多部 Docker 主機,咁就要用到 overlay network 嘞。呢個驅動程式專為 Swarm mode 設計,可以喺唔同主機嘅容器之間建立一個虛擬大網絡。設定 overlay networks 嘅前提係你要初始化或者加入一個 Swarm 集群。設定命令類似咁:docker network create -d overlay --subnet 10.10.0.0/16 my_overlay_net。佢會自動幫你處理好跨主機嘅 IP address allocation 同路由,等唔同主機上嘅容器可以好似喺同一個本地網絡咁樣溝通,對於部署分散式服務(例如數據庫集群、微服務)嚟講係不可或缺嘅。

至於 MacvlanIPvlan 呢兩種驅動程式,就比較進階,主要用嚟解決容器需要直接擁有可路由嘅真實 IP 地址嘅情況。Macvlan network 允許你指派一個實體網絡介面(例如 eth0)俾容器,然後每個容器會獲得一個獨一無二嘅 MAC 地址同 IP,喺網絡上看落就同實體機冇分別。呢個對於要直接暴露服務俾現有網絡設施(例如防火牆策略)好有用。設定嘅時候你要指明父介面同子網,例如 docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 my_macvlan_net。要留意嘅係,唔係所有雲端供應商或者網絡設定都支援 Macvlan,用之前要 check 清楚。而 IPvlan 就同 Macvlan 類似,但係唔同容器可以共享同一個 MAC 地址,只係 IP 唔同,對於 MAC 地址有限制嘅環境可能更適合。

最後提下 host 同 none 呢兩個特殊驅動程式。host 驅動程式就係完全唔做隔離,容器直接共用主機嘅 network namespace,網絡性能最好,但就冇咗隔離性。none 就係乜網絡都唔俾,容器得個孤島 loopback 接口。呢兩個通常用喺好特定嘅測試或者對性能有極端要求嘅場景。

設定完之後,點樣檢查同管理呢?你可以用 docker network ls 睇下有咗網絡列表,用 docker network inspect [網絡名] 嚟睇晒詳細設定,包括 subnet configuration、連接咗嘅容器、IP address management 狀態等等。仲有,記住 Docker 背後係用緊 iptables 嚟做網絡地址轉換(NAT)同防火牆規則嘅,所以如果你遇到容器網絡唔通,有時都要識得去檢查下 iptables 嘅規則有冇被意外改動。

總括嚟講,設定 網絡驅動程式 唔單止係打條命令,而係要根據你個應用嘅部署場景(單機定集群)、網絡隔離需求、性能要求同埋現有網絡基建,去揀選最合適嘅 network strategy。由簡單嘅 Bridge networks 到跨主機嘅 Overlay networks,再到直接掛接物理網絡嘅 Macvlan networks,每種都有其用武之地。熟練運用 docker network create 同相關嘅 network commands,你先可以真正駕馭到 container networking,打造出穩陣又高效嘅應用部署環境。

docker network create - Docker

AboutDockerProfessional illustrations

IP地址範圍自訂技巧

好,講到 Docker 網絡設定,其中一個好實用但又未必個個識深入玩嘅技巧,就係自訂 IP 地址範圍。喺 Docker 入面,無論你係用緊 Bridge networkoverlay network 定係 Macvlan 呢類 network driver,識得手動設定個子網同網關,對於管理成個 container 環境嘅 IP address allocationcontainer communication 真係好重要。點解要自訂?默認情況下,Docker Engine 會用佢自己預設嘅 IP 段(例如經典嘅 172.17.0.0/16),但如果你公司內部網絡已經用緊呢段 IP,或者你想將 Container 更精準咁整合入你現有嘅 network strategy,咁自訂就係必須步驟啦。

首先,最基本嘅玩法,就係喺用 Docker CLI 嘅 docker network create 命令時,直接指定 --subnet 同 --gateway。呢個方法對於建立 user-defined networks 嚟講最直接。例如,你想建立一個 Bridge network 專門俾你嘅後端服務用,你可以咁樣設定:docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.1 backend-net。咁樣做嘅好處係,所有接入呢個 Bridge networkContainer,都會從 192.168.100.0/24 呢個 subnet configuration 度拎 IP,而唔會同其他網絡撞地址。呢個設定對於實現 network isolation 同清晰嘅 IP address management 好有幫助,尤其當你嘅應用規模大起上嚟,就知預先規劃好子網有幾咁省時。

進階少少,當你要處理多個網絡或者更複雜嘅 container networking 場景時,自訂 IP 範圍就更加關鍵。例如,喺 Swarm mode 下建立 overlay networks 俾跨主機嘅服務通訊用。你可以好仔細咁規劃:docker network create --driver overlay --subnet 10.10.0.0/16 --subnet 2001:db8::/64 --gateway 10.10.0.1 --gateway 2001:db8::1 multi-subnet-overlay。見到冇?呢度仲支援埋雙棧(IPv4 + IPv6)設定,一次過定義多個 子網,等 Docker daemon 可以按需要分配。呢種規劃對於未來擴展同避免 IP 耗盡好有用。記住,overlay network 嘅子網一定要同你宿主機嘅物理網絡唔好重疊,否則會引起路由混亂。

另外,對於需要直接暴露喺實體網絡嘅場景,好似係用 Macvlan 或者 IPvlan 呢類 network drivers,自訂 IP 範圍就更加唔可以求其。因為呢類網絡會令 Container 睇落好似一部有實體 MAC 地址嘅獨立主機咁,直接攞你公司 LAN 嘅 IP。所以,你一定要同你嘅網絡管理員夾好,劃定一個專屬嘅、唔會同其他設備衝突嘅 IP 段出嚟。例如:docker network create -d macvlan --subnet 172.16.86.0/24 --gateway 172.16.86.1 -o parent=eth0 macvlan-net。呢個命令就指明咗,所有用呢個 Macvlan networks 嘅容器,IP 都會由 172.16.86.0/24 呢個範圍分配,而且經由 eth0 呢張實體網卡出入。如果唔自訂而用咗默認段,好大機會同你辦公室其他電腦撞 IP,成個網絡即刻癱瘓。

最後,有幾個實戰上嘅 技巧注意事項 要提提你。第一,規劃 IP 範圍時,要預留足夠空間。唔好下下用到 /24(即係 254 個 IP),諗下將來會唔會爆。用 /16 或者更大嘅段去規劃,再透過 network commands 去細分,彈性會大好多。第二,善用 docker network inspect 呢個命令去檢查你建立嘅網絡詳細設定,睇下個 subnet configuration網關 同埋已經分配咗嘅 IP 地址,確保一切跟足你計劃行。第三,要明白 Docker 底層嘅運作,例如 docker0 呢個默認 software bridgeveth 對同 network namespace 點樣同你自訂嘅 IP 範圍互動,仲有 iptables 規則會點樣因應你嘅子網而自動設定。了解呢啲底層嘢,當出現網絡問題時(例如容器之間 ping 唔通,或者出唔到外網),你排查起上嚟就會快好多,知道係咪 IP 分配或者路由設定出咗問題。總而言之,自訂 IP 地址範圍唔係為咗炫技,而係一種必要嘅 network strategy,令到你成個 Docker 環境更加穩定、易管理,同埋可以無縫融入你現有嘅 IT 基建入面。

docker network create - Docker

AboutDockerProfessional illustrations

網絡隔離與安全設定

講到 Docker 嘅網絡隔離與安全設定,其實係確保你啲 Container 唔會亂咁通訊,同埋防止外界唔應該嘅存取。呢個係 Docker Engine 嘅核心功能之一,靠嘅就係 network namespace 呢個 Linux 核心技術,簡單講就係每個 Container 都有自己獨立嘅網絡空間,好似有自己嘅網卡、IP 同路由表咁,同宿主機或者其他 Container 完全隔離咗開嚟。但係得隔離唔夠㗎,仲要設定佢哋點樣安全地溝通,呢度就要靠唔同嘅 network driver 同埋一啲底層工具嘅配合啦。

首先,最基本又最常用嘅就係 Bridge network。當你安裝完 Docker,佢預設就會有個叫 docker0software bridge。你唔特別指定嘅話,Container 通常就會連去呢個預設嘅橋接網絡。佢嘅好處係自動做咗網絡隔離同 IP address allocation,同一個 bridge 入面嘅 Container 可以用 IP 互相通訊,但係同宿主機或者其他 bridge 嘅網絡就隔離咗。不過,預設嘅 bridge 喺安全同管理上比較粗疏,所以 Docker 建議大家用 user-defined networks,即係自己用 Docker CLI 嘅 docker network create 命令去建立新嘅 Bridge networks。咁樣做有咩好處呢?除咗可以自定義 subnet configuration網關,最重要係可以提供自動嘅 DNS 解析,Container 之間可以用名嚟互相訪問,唔使記 IP,而且喺網絡隔離上更清晰。安全設定上,你可以透過 iptables 規則(Docker 會自動幫你生成同管理一部分)去控制進出呢個 bridge 嘅流量,例如限制某個 Container 只能訪問特定端口。不過要留意,bridge network 本身係設計俾單一宿主機用,Container 要同外界通訊,就需要經過 docker0 同宿主機嘅 veth 虛擬設備配對,再經宿主機做網絡地址轉換(NAT)。

如果要處理多宿主機嘅情境,例如喺 Swarm mode 底下,咁你就要用到 Overlay networks 嘞。Overlay network 係一種 network driver,專門為咗跨越多部 Docker 宿主機而設計,等唔同主機上面嘅 Container 可以好似喺同一個私人網絡裏面咁直接通訊。佢嘅隔離同安全機制更加強勁。當你建立一個 overlay network 時,佢會為你創建一個加密嘅通道,預設會對喺唔同宿主機之間傳送嘅數據進行加密,呢點對於安全好重要。而且,overlay network 本身亦都提供咗網絡隔離,Swarm 入面嘅服務如果唔係連接同一個 overlay network,係完全無法溝通嘅。你可以透過 docker network create 命令,指定 --driver overlay 嚟建立,仲可以設定 子網 範圍。管理方面,你可以用 docker network inspect 嚟睇清楚個網絡嘅詳細設定同連接咗嘅服務,方便你規劃 network strategy

對於一啲追求高性能或者需要 Container 直接暴露喺實體網絡嘅場景,Docker 提供咗 MacvlanIPvlan 呢兩種 network driver。佢哋嘅設計理念係跳過宿主機嘅網絡堆疊,讓 Container 攞到一個好似直接連接喺實體網絡上嘅 MAC address(Macvlan)或者直接用宿主機網絡接口嘅 IP address(IPvlan)。呢種方式嘅隔離主要係喺第二層(Macvlan)或第三層(IPvlan)實現,好處係網絡延遲低,而且可以俾 Container 攞到同你公司內網同一個網段嘅 IP,方便管理。但係安全設定就要格外小心!因為 Container 直接暴露喺底層網絡,你唔可以再依賴 Docker 幫你管理嘅 iptables 規則做隔離(呢啲規則主要作用喺宿主機層面)。你必須喺你嘅實體網絡設備,例如交換機或者防火牆上面,設定基於 MAC 地址或 IP 地址嘅訪問控制清單(ACL)嚟做隔離同保護。所以,用 Macvlan 或 IPvlan 之前,一定要同你嘅網絡管理員溝通好 IP address management 同安全策略。

最後,無論你用邊種 network driver,有幾點安全設定嘅通用建議一定要記住。第一,儘量避免使用 --network host 呢種 host network 模式,因為咁樣會令到 Container 共用宿主機嘅網絡命名空間,完全失去網絡隔離,好大安全風險。第二,善用 Docker 內置嘅防火牆機制。Docker 會同 iptables 互動,自動加入規則嚟管理 Container communication 同端口映射。你應該學習點樣閱讀同理解呢啲規則(用 iptables -L -n 命令),而唔好隨便清空 iptables,否則可能會破壞 Docker 嘅網絡功能同安全隔離。第三,定期檢查你嘅 user-defined networks。用 docker network ls 睇下有冇多餘嘅網絡,用 docker network inspect 深入睇下每個網絡連接咗邊啲 Container,確保冇啲測試用嘅 Container 遺留喺生產網絡入面。第四,對於敏感服務,考慮建立專用嘅隔離網絡。例如,你個數據庫 Container 應該放喺一個獨立嘅 bridge network 裏面,只有相關嘅應用 Container 先可以連接呢個網絡,而唔好將數據庫暴露喺預設或者公眾可訪問嘅網絡。透過精心規劃你嘅 network strategy 同埋理解每種 network drivers 嘅隔離特性同安全要點,你就可以喺享受 Docker 帶來嘅便利嘅同時,大大提升你整個容器環境嘅安全性。

docker network create - docker

AboutdockerProfessional illustrations

容器間DNS自動解析

講到容器之間嘅通訊,好多人都會諗起要記IP或者用--link,但其實由Docker Engine提供嘅容器間DNS自動解析先至係最方便同現代嘅做法。當你透過Docker CLI用 docker network create 指令建立一個user-defined networks(例如Bridge network或者overlay network)嗰陣,Docker就會自動為呢個網絡入面嘅所有Container啟動一套內置嘅DNS解析服務。呢個功能真係好鬼正,因為你唔使再記住一抽數字IP地址,直接可以用你起Container嗰陣設定嘅容器名(--name)或者個網絡別名(--network-alias)嚟同其他容器「傾偈」。例如你喺同一個Bridge network入面有兩個容器,一個叫「web-app」,另一個叫「database」,咁「web-app」容器裏面嘅程式碼,就可以直接用「database」呢個名去連接,Docker嘅內置DNS伺服器會自動將「database」呢個名解析成「database」容器嘅IP地址,完全唔使你自己做任何額外設定。

呢套容器間DNS自動解析嘅機制,背後係由Docker daemon入面嘅一個內置DNS伺服器負責。每當你建立一個新嘅user-defined networks,無論係Bridge networks定係用喺Swarm modeOverlay networks,Docker都會為呢個網絡分配一個內置嘅DNS伺服器(通常係127.0.0.11)。所有加入呢個網絡嘅容器,佢哋嘅 /etc/resolv.conf 檔案都會被Docker自動設定,將DNS查詢指向呢個內置伺服器。呢個設計確保咗network isolation,唔同網絡嘅容器有各自獨立嘅DNS解析域,唔會撞名或者解析錯誤。舉個實用例子,如果你用 docker network create --driver bridge my_bridge_net 起咗個網絡,然後用 docker run --name service1 --network my_bridge_net ... 同 docker run --name service2 --network my_bridge_net ... 起兩個容器,咁「service1」同「service2」就可以直接用對方個名互相ping到或者通訊,超級方便。

不過要留意,Docker嘅DNS自動解析有幾個重點同限制。首先,佢只喺user-defined networks上面先會生效,即係你用 docker network create 自己建立嘅Bridge networkoverlay networkMacvlan networks或者IPvlan先有。Docker預設嗰個bridge network(即係docker0嗰個)係呢個功能嘅,喺上面嘅容器只可以用IP或者舊式嘅--link去通訊。所以,如果你需要容器之間用名嚟溝通,第一件事就係要建立自己嘅網絡。其次,DNS解析係基於容器名或者網絡別名,所以命名好重要。你可以用 docker network connect 指令,將一個已經運行緊嘅容器連接到另一個網絡,仲可以指定一個network-alias(網絡別名),咁其他容器就可以用呢個別名嚟訪問佢。例如,你可以將一個數據庫容器連到後端網絡,並設定別名「db-prod」,咁所有後端服務容器都可以用「db-prod」呢個統一嘅名去連接,就算個數據庫容器本身個名叫「mysql-container-001」都冇問題,呢個對於服務發現同IP address management好有幫助。

對於更複雜嘅環境,例如用Docker Swarm mode部署分散式服務,overlay network上面嘅DNS自動解析就更加強大。喺Swarm入面,你部署一個服務(service),例如 docker service create --name api --network my_overlay_net ...,Docker唔單止會為每個服務任務(容器)提供DNS解析,仲會提供負載均衡功能。當你喺同一個overlay network入面嘅另一個容器裏面,用「api」呢個名去訪問時,Docker嘅DNS會返回所有屬於「api」服務嘅健康容器IP地址,並且通訊會自動被負載均衡到其中一個實例,呢個對於構建高可用性應用係不可或缺嘅。呢個機制背後涉及network namespaceveth pair同iptables規則嘅緊密配合,但作為使用者,你幾乎唔使點理底層嘅subnet configuration或者IP address allocation,享受呢種無縫嘅container communication就得。

最後,有幾個實戰小貼士。如果你想檢查DNS解析係咪正常,可以入到容器裏面,用 nslookup 或者 ping 其他容器個名試下。另外,用 docker network inspect [網絡名] 指令可以詳細睇到個網絡嘅配置,包括網關子網資訊,以及連接咗嘅容器同佢哋嘅IP地址,對於排查網絡問題好有用。如果你發現容器之間用名連唔到,首先檢查吓佢哋係咪真係喺同一個user-defined networks裏面,因為network isolation嘅關係,唔同網絡嘅容器係完全隔離嘅。總括嚟講,善用Docker嘅容器間DNS自動解析,可以令你嘅container networking策略更加清晰同易於管理,由細規模嘅Bridge network到大型分散式嘅Overlay networks,都能夠提供穩定可靠嘅服務發現基礎。

docker network create - veth

AboutvethProfessional illustrations

實例:建立多容器通訊

好啦,而家我哋就用一個實戰例子,具體講下點樣建立一個多容器通訊嘅網絡。假設你喺 2026 年嘅 Docker Engine 入面,想整一個簡單嘅網頁應用,前面有個 Nginx 做 reverse proxy,後面係一個 Apache 伺服器處理 PHP,再加多個 MySQL 資料庫。呢個經典組合,正正需要容器之間可以互相搵到同傾到計。最直接嘅方法,就係唔好用 Docker 預設嗰個bridge network(即係 docker0),而係自己用 Docker CLInetwork create 指令,建立一個 user-defined networks

點解要自己整?因為預設嘅 bridge network 功能有限,容器之間主要靠 IP 地址通訊,而且冇內置嘅 DNS 服務,即係話容器 A 唔可以靠「容器名」直接 ping 到容器 B。而自己建立嘅 Bridge network 就唔同啦,佢提供咗自動嘅服務發現,即係話你只要將容器連到同一個自定義網絡,佢哋就可以直接用對方個容器名當 hostname 嚟溝通,呢個對於動態分配 IP 嘅環境嚟講,係極之方便嘅 container communication 策略。

咁點樣開始呢?首先,我哋打開 terminal,用一個好簡單嘅指令嚟建立網絡。例如,我哋想建立一個叫 my_app_net 嘅橋接網絡,可以咁打:docker network create --driver bridge my_app_net。呢個指令會叫 Docker daemon 幫我哋建立一個新嘅 software bridge,背後會設定好 subnet configuration網關,處理晒 IP address allocation 呢啲瑣碎事。你可以用 docker network inspect my_app_net 嚟睇吓個網絡嘅詳細設定,例如佢派咗邊個 子網 段,個網關 IP 係乜,清清楚楚。

建立好網絡之後,我哋就可以喺運行容器嘅時候,用 --network 參數將佢哋放埋一齊。例如,我哋先起個 MySQL 容器,設定好 root 密碼同資料庫名,並將佢連去 my_app_net:docker run -d --name mysql_db --network my_app_net -e MYSQL_ROOT_PASSWORD=secret mysql:latest。跟住,我哋起個 Apache + PHP 嘅容器,同樣連去同一個網絡:docker run -d --name web_app --network my_app_net -v ./webcode:/var/www/html custom_apache_php_image。最後,先至起個 Nginx 容器,將佢嘅 80 port 映射去主機,同時都連去同一個網絡:docker run -d --name nginx_proxy --network my_app_net -p 80:80 nginx:latest。

咁樣設定之後,魔法就發生啦。喺 web_app 呢個容器入面,你唔需要知道 mysql_db 嘅實際 IP 地址係幾多,你只需要喺你嘅應用程式設定檔(例如 WordPress 嘅 wp-config.php)入面,將資料庫主機(DB_HOST)設定為 mysql_db 就得。同樣地,喺 nginx_proxy 容器入面,你可以設定一個 upstream,指向 web_app:80。因為佢哋全部喺同一個 user-defined networks 入面,Docker 嘅內置 DNS 解析器會自動將容器名翻譯成正確嘅 IP 地址。呢種 network isolation 亦好處多多,因為 my_app_net 同其他網絡(包括預設 bridge 同主機網絡)係隔離嘅,安全性都高啲。

當然,自定義 Bridge network 只係其中一種 network driver。如果你嘅應用要跨越多個 Docker 主機(例如喺 Swarm mode 底下),咁你就需要用到 Overlay networks 呢種網絡驅動程式。Overlay network 可以喺唔同主機嘅容器之間建立一個虛擬網絡,等佢哋好似喺同一個私密網絡入面咁通訊,背後會用到 VXLAN 呢類隧道技術。建立方法都好相似,喺 Swarm 模式下用 docker network create -d overlay my_overlay_net 就得。至於 MacvlanIPvlan 呢兩種 network drivers,就係進階用法,主要想俾容器一個好似實體機一樣嘅 MAC 地址(Macvlan)或者直接喺主機網絡介面上分配 IP(IPvlan),等容器可以直接暴露喺你公司嘅區域網絡入面,彷彿一部獨立主機。不過呢兩種設定相對複雜,要小心處理 IP address management,避免同現有網絡設備撞 IP。

最後提多句,所有呢啲網絡魔法,背後都係靠 Linux 核心嘅 network namespaceveth(虛擬以太網卡對)、iptables 規則同 Linux bridge 呢幾樣技術支撐住。當你用 docker network create 呢啲 network commands 時,Docker 就係幫你自動化咗組裝呢啲底層元件嘅過程,令我哋可以專注喺應用邏輯,而唔使成日煩惱點樣配置 subnet configuration 或者路由表。所以,掌握點樣建立同管理呢啲網絡,係設計一個穩固、可擴展嘅多容器應用嘅關鍵 network strategy

docker network create - iptables

AboutiptablesProfessional illustrations

檢查網絡狀態指令

好啦,講完點樣建立唔同類型嘅網絡(例如 bridge network、overlay network 或者 Macvlan network),緊係要識得點樣檢查佢哋嘅狀態啦!喺 Docker 世界入面,Docker CLI 提供咗一系列好實用嘅指令,等你可以好似網絡管理員咁,睇清睇楚每個 Container 之間嘅連線狀況、IP 分配,甚至係背後嘅 network namespace 設定。作為開發者或者 DevOps,熟練呢啲指令絕對可以幫你快速診斷問題,例如點解某個 Container 忽然之間 ping 唔到另一個,或者個 overlay networkSwarm mode 下點解同步唔到。

最基本又最常用嘅指令,一定係 docker network ls。你打呢句指令落去,Docker Engine 就會列出你系統入面所有嘅網絡,包括晒系統預設嘅(好似係 bridge、host、none)同你自己用 docker network create 整嘅 user-defined networks。佢會顯示個網絡嘅名(NAME)、佢用緊邊種 network driver(DRIVER,例如係 bridge、overlay、macvlan)、同埋一個獨特嘅網絡 ID(NETWORK ID)。呢個列表就好似一個目錄咁,讓你第一時間知道有咩網絡資源可以用。例如,你會見到預設嘅 bridge network(通常個名就叫 bridge,背後係由 docker0 呢個 software bridge 負責),同埋一啲為咗特定專案而建立嘅自訂 Bridge networks

不過,淨係睇個列表梗係唔夠詳細啦。想深入檢查某一個特定網絡嘅詳細配置,就要用到 docker network inspect [NETWORK_NAME_OR_ID] 呢個指令。呢個指令真係好似一個 X 光機,會將個網絡嘅底褲都睇穿!佢會輸出一個好詳細嘅 JSON 格式資訊,我哋可以重點睇吓以下幾個部分:

基本配置:呢部分會講清楚個網絡用緊咩 network driver,例如係 Bridge network 定係 Overlay networks。仲會顯示個網絡嘅 子網 (subnet) 範圍、網關 (gateway) 嘅 IP 地址,同埋其他 IP address management 設定。如果你建立網絡時有設定 subnet configuration,呢度會一清二楚。 已連接嘅容器:呢個係最有用嘅部分之一。佢會列出所有連接咗去呢個網絡嘅 Container,每個 Container 嘅名、ID,同埋最重要嘅——佢喺呢個網絡入面獲分配嘅 IP 地址(IPv4 同 IPv6)。對於 container communication 嚟講,你知道咗對方個 IP 就乜都好辦事啦。你可以即時睇到,你個應用程式 Container 同個數據庫 Container 係咪真係喺同一個 Bridge network 入面,IP 係咪同一個網段。 網絡選項同詳細資料:對於唔同嘅 network drivers,呢度會顯示唔同嘅進階設定。例如,對於 overlay network,你可能會見到有關 Swarm mode 嘅資訊,例如個網絡係唔係可以畀唔同嘅 Swarm 節點共用。對於 Macvlan networks,就會顯示佢綁定咗去邊個主機嘅實體網絡接口。

舉個實際例子,假設我哋有個叫 my_app_network 嘅自訂 bridge network,我哋打 docker network inspect my_app_network。輸出會顯示呢個網絡嘅子網可能係 172.18.0.0/16,網關係 172.18.0.1。然後喺 "Containers" 部分,你會見到有兩個 Container 連住,一個叫 web_server,拎到 IP 172.18.0.2;另一個叫 database,拎到 IP 172.18.0.3。咁你就知道,點解你個 web_server 可以直頭用 database 呢個 hostname 或者 172.18.0.3 呢個 IP 去連接到個數據庫,因為佢哋經由同一個 user-defined networks 連接,享有自動嘅 DNS 解析功能,而且網絡係 network isolation,同外界同其他網絡分開咗。

除咗用 Docker CLI 嘅指令,有時要深入啲了解個網絡底層發生緊咩事,你可能需要登入到個 Container 裏面,或者喺主機上用系統指令去檢查。例如,你可以用 docker exec -it [CONTAINER_NAME] bash 進入一個 Container,然後用 ip addr 或者 ifconfig(如果有的話)去睇吓個 Container 內部見到嘅網絡接口。你會發現,每個 Container 喺一個獨立嘅 network namespace 裏面,佢會有一個虛擬嘅以太網接口(通常叫 eth0),呢個接口就係經由一對虛擬以太網設備(veth)連接到主機上嘅 docker0 或者你自訂嘅 bridge network 對應嘅 Linux bridge。另外,如果你想睇吓主機層面嘅 iptables 規則(Docker 會用佢嚟做網絡隔離同端口轉發),或者想檢查 Linux bridge 本身嘅狀態,咁就要喺主機上使用像 brctl show(如果係舊式工具)或者 ip link show 同 bridge link 呢類指令。呢啲底層工具可以幫你驗證 Docker daemon 係咪正確咁設定好啲 network driverscontainer networking 策略。

總而言之,檢查網絡狀態唔單止係睇個 Container 有冇拎到 IP 咁簡單。由高層次嘅 docker network inspect 去理解 IP address allocation 同容器連接關係,到必要時深入底層去睇 vethdocker0 bridge 同 iptables 規則,呢一套「組合拳」先可以令你完全掌握 Container 嘅網絡狀況。無論你係用緊簡單嘅 Bridge network 做單機開發,定係用緊複雜嘅 overlay network 去連接跨主機嘅 Swarm mode 服務,識得靈活運用呢啲 network commands 去檢查狀態,都係確保你應用程式穩定通訊嘅關鍵一步。

docker network create - namespace

AboutnamespaceProfessional illustrations

常見錯誤排解指南

好喇,而家就同大家深入傾下,喺用 Docker CLI 去 docker network create 嗰陣,會遇到嘅常見錯誤同點樣排解。呢啲問題好多時都同 network driver 嘅選擇同設定有關,搞唔掂嘅話,Container 之間嘅 container communication 就會斷晒纜。

首先,最多人撞板嘅係 Bridge networkIP address allocation 問題。你自己用 docker network create 起個 user-defined networks,例如指定咗個 子網 係 172.20.0.0/16,但係當你啲 Container 攞唔到 IP 或者攞到嘅 IP 同你預期唔同,咁就頭痕喇。好多時呢個問題源於 Docker EngineIP address management 池已經用晒,或者同你宿主機(Host)或者其他網絡有衝突。點樣 check 呢?你可以用 docker network inspect [網絡名] 去睇下個網絡嘅詳細設定,包括個 網關 同已經分配咗嘅 IP。如果真係爆咗,解決方法可以係刪除一啲唔用嘅網絡或者容器,又或者喺建立網絡時,用 --subnet 同 --ip-range 參數,好明確咁劃定一個細啲嘅 IP 範圍,例如 --subnet 172.20.1.0/24 --ip-range 172.20.1.0/28,咁就可以避免 IP 唔夠派或者亂派。

第二個常見錯誤,係關於 network isolation 失靈。你明明建立咗兩個唔同嘅 Bridge networks,諗住將容器分開隔離,但點解佢哋仲係 ping 到對方?呢度就要了解下 Dockersoftware bridge 機制。每個自定義嘅 Bridge network 其實都係一個獨立嘅 network namespace,但係如果兩個網絡都冇特別設定 iptables 規則去阻止,而宿主機嘅路由又通嘅話,某啲情況下係可以互通嘅。要徹底隔離,你需要喺建立網絡時,加上 --internal 參數,咁樣個網絡就會完全對外隔離,或者要靠手動設定 iptables 規則去控制流量。記住,默認嘅 docker0 橋同你自己起嘅橋,喺隔離策略上係有分別㗎。

跟住講下進階啲嘅 network drivers,例如 Overlay networks。呢個通常用喺 Swarm mode 度,等唔同主機上面嘅容器可以互通。最常見嘅錯誤就係起唔到個 overlay network,成日彈啲錯誤訊息出嚟。呢個好多時關乎到個 Docker daemon 嘅設定,特別係個 --cluster-store 同 --cluster-advertise 參數有冇設定正確。喺 2026 年嘅版本,雖然設定可能簡化咗,但你都要確保 Swarm 已經初始化好,同埋啲節點之間嘅通訊埠(默認係 2377、7946、4789)有冇被防火牆擋住。另一個伏位係,如果你喺 Swarm mode 下用 docker network create 起 overlay network 時冇指明 --attachable,咁只有 Swarm 服務(Service)可以用呢個網絡,普通容器係連唔到入去嘅,呢點要特別留意。

至於 MacvlanIPvlan 呢類 Macvlan networks,佢哋可以令容器好似有實體機咁直接取得局域網 IP,但設定錯誤嘅機會亦都好高。最經典嘅錯誤係「MAC address conflict」或者「network is already in use」。因為 Macvlan network 會直接佔用你實體網絡嘅一個 IP,如果你個 子網 設定錯咗(例如同你屋企個 Router 派 IP 嘅範圍重叠),又或者你手動指定嘅 IP 同網絡入面其他裝置撞咗,咁就一定會出問題。排解方法係,首先要清楚知道你宿主機所喺網絡嘅 subnet configuration,然後喺 docker network create 時,用 --subnet、--gateway 同 --ip-range 參數,好精確咁劃分一個細範圍出嚟專俾 Docker 用,千祈唔好同其他裝置嘅 IP 範圍撞到正。另外,某啲家用路由器或者雲供應商嘅網絡,可能會 block 咗 Macvlan 嘅流量,呢個就要睇返相應嘅文件。

最後,一啲通用嘅排解思路。當你遇到任何 docker network create 嘅問題,第一步永遠係檢查 Docker daemon 嘅日誌,喺 Linux 上通常係 journalctl -u docker.service,可以睇到底層出咗咩事。其次,善用 docker network ls 睇下有咗網絡,再用 docker network inspect 深入睇設定,對比下同你心目中嘅設定有咩唔同。仲有,要記住 veth 呢個概念,每個容器連到網絡都會有一對虛擬以太網設備(veth pair),一邊喺容器嘅 network namespace,一邊喺宿主機連住個 software bridge。用 ip link 或者 brctl show(如果裝咗 bridge-utils)呢類命令,可以幫你睇到啲 veth 有冇成功連上個橋,好多網絡唔通嘅問題,其實係呢個連接出咗事。總而言之,container networking 雖然複雜,但跟住以上嘅 network strategy 同命令逐步檢查,大多數問題都可以自己搞得掂。

docker network create - software

AboutsoftwareProfessional illustrations

最佳實踐與效能優化

講到 Docker network create 嘅最佳實踐同效能優化,我哋首先要明瞭,唔同嘅 network driver 選擇,直接影響到你成個 Container 叢集嘅表現同安全。好多新手貪方便,乜都直接用 Docker Engine 預設嗰個 bridge network,但係喺2026年嘅生產環境,咁樣做就好容易撞板。例如,如果你有大量 container communication 需求,特別係跨主機嘅通訊,overlay network 就幾乎係必然選擇,尤其係當你啟用咗 Swarm mode 去做服務編排嘅時候。Overlay networks 嘅設計本身就用嚟解決跨主機 Container 通訊問題,佢會自動幫你處理好 IP address allocation 同路由,但係要留意返,佢會引入少少額外嘅封包開銷,因為要封裝多一層。所以,最佳實踐係:純粹單一主機內嘅容器通訊,用自定義嘅 Bridge network;需要跨主機、或者係 Swarm 服務之間嘅通訊,先至用 Overlay network

點樣設定個網絡先叫優化?第一個要諗嘅就係 subnet configuration。你用 Docker CLI 落 docker network create 指令嘅時候,千祈唔好由得 Docker daemon 自己隨機派一個 子網 算數。你應該好明確咁用 --subnet 同 --gateway 參數去指定一個同你公司內部網絡規劃吻合嘅網段。咁樣做有幾個好處:一來避免 IP 衝突,二來方便你之後做 IP address management 同監控,三來對於效能都有幫助。點解呢?因為如果個子網設定得亂七八糟,Docker Engine 同底層系統(例如 iptables 規則、路由表)處理起上嚟會冇咁順暢。舉個例,你建立一個自定義 Bridge network 時,可以咁樣規劃:docker network create --driver bridge --subnet 172.28.0.0/16 --gateway 172.28.0.1 my_optimized_bridge。咁樣,所有接入呢個網絡嘅容器,都會喺一個明確、整齊嘅範圍內拎到 IP,管理同排查問題都容易好多。

另外,關於 network isolation 同安全,都係效能優化嘅一環。唔好將所有容器擺晒落同一個網絡度!應該按照應用程式嘅邏輯組件,建立多個獨立嘅 user-defined networks。例如,你個 Web 應用程式,前端容器一組網絡,後端數據庫容器另一組網絡。呢種 network strategy 唔單止提升安全性(遵循最小權限原則),其實對網絡效能都有正面影響。點解?因為咁樣可以減少唔必要嘅廣播流量同 iptables 規則鏈嘅長度,等 Docker daemon 處理網絡規則時更有效率。你可以用 docker network inspect 指令去檢查每個網絡嘅詳細設定,確保冇容器誤連去唔應該去嘅網絡。

對於追求極致網絡效能同低延遲嘅場景,你可能要考慮 Macvlan 或者 IPvlan 呢類 network driversMacvlan networks 可以令到你個 Container 直接攞到同宿主機同一個物理網絡段裡面嘅一個真實 MAC 地址同 IP 地址,彷彿佢就係一部實體機咁。咁樣,Container 同外界通訊就可以完全 bypass 咗宿主機嘅 software bridgedocker0 橋接,路徑最短,延遲最低,效能最高。但係,用 Macvlan 要求你嘅底層網絡設備(例如 Switch)能夠處理大量 MAC 地址,同埋要做好 IP 管理,唔係就好易亂。而 IPvlan 就係另一個選擇,佢允許多個容器共享同一個 MAC 地址但用唔同嘅 IP,某啲網絡環境下會更為適合。記住,選擇呢類 driver 係進階操作,一定要同你嘅網絡管理員夾好 子網網關 嘅分配。

最後,唔好忽略咗 Docker 本身嘅網絡模型基礎——network namespaceveth 配對。每一個 Container 都有自己獨立嘅 network namespace,而佢同宿主機(或者講,同 Bridge network)嘅連接,就係透過一對虛擬以太網卡 veth 實現。效能優化嘅一個細位,就係監控呢啲 veth 接口有冇出現瓶頸或者大量錯誤包。你可以用宿主機上嘅傳統網絡工具(如 ip link, ethtool)去檢查。另外,iptables 規則嘅數量同複雜度,都會影響網絡吞吐量,特別係當你喺容器之間設定咗好多防火牆規則時。定期用 iptables-save 之類嘅指令檢視,並簡化規則,對於維持高效能都好重要。總括嚟講,Docker network create 嘅最佳實踐,就係要「睇餸食飯」,根據你應用程式嘅通訊模式、規模同效能要求,精準咁選擇 network drivers,並且做好細緻嘅 subnet configurationnetwork isolation,咁先至可以喺2026年嘅雲原生環境入面,確保你嘅容器服務又快又穩。

Frequently Asked Questions

喺2026年,點樣用 `docker network create` 指令建立一個最常用嘅自定義網絡?

喺2026年,使用 `docker network create` 建立自定義網絡依然係管理容器通訊嘅基礎。最簡單嘅指令係 `docker network create my-network`,佢會建立一個採用最新預設驅動程式(通常係bridge)嘅網絡。

  • 基本指令**:`docker network create <網絡名稱>` 即可建立。
  • 指定驅動程式**:可以加入 `--driver bridge` 或 `overlay` 等參數。
  • 檢查網絡**:建立後可用 `docker network ls` 查看所有網絡。

`docker network create` 有邊幾種主要嘅驅動程式(driver)可以揀?2026年有冇新嘅選擇?

截至2026年,Docker 網絡嘅核心驅動程式保持穩定,主要分為 `bridge`、`overlay`、`host`、`macvlan` 同 `none` 幾種。新版本可能對現有驅動程式有性能優化,但未引入全新嘅底層驅動程式類型。

  • bridge**:預設選擇,用於單一主機上嘅容器通訊。
  • overlay**:用於連接多個 Docker 守護進程(Swarm 叢集)。
  • macvlan**:直接為容器分配 MAC 地址,令佢哋好似實體機一樣存在於網絡。

建立 Docker 網絡時,點樣設定子網(subnet)同閘道(gateway)?

為咗避免 IP 衝突同精確控制網絡拓撲,建立網絡時可以手動指定子網同閘道。使用 `--subnet` 同 `--gateway` 參數就可以輕鬆設定。例如:`docker network create --subnet=172.20.0.0/16 --gateway=172.20.0.1 my-custom-net`。

  • 設定子網**:使用 `--subnet=` 參數。
  • 設定閘道**:使用 `--gateway=` 參數。
  • 分配靜態IP**:喺運行容器時,可以用 `--ip` 參數為容器指定固定IP。

點樣確保用 `docker network create` 建立嘅網絡係安全,防止容器之間未經授權嘅存取?

Docker 網絡安全主要透過網絡隔離同防火牆規則實現。建立獨立網絡本身已提供基礎隔離,而喺2026年,最佳實踐係結合內置安全功能同外部工具。

  • 網絡隔離**:為唔同應用建立獨立網絡,佢哋預設唔互通。
  • 內置選項**:建立時可使用 `--internal` 參數建立完全對外斷網嘅內部網絡。
  • 進階防護**:配合主機防火牆(如 iptables/nftables)或容器安全平臺(如 Sysdig)設定更細緻嘅規則。

使用 `docker network create` 會唔會產生額外費用?

`docker network create` 指令本身完全免費,佢係 Docker Engine 嘅核心功能。費用嘅產生與否取決於你喺邊度運行 Docker。如果喺自己嘅伺服器或開發機上使用,就冇直接成本。

  • 指令免費**:建立和管理網絡嘅指令唔收費。
  • 雲端成本**:如果喺 AWS ECS、Azure Container Instances 等雲服務使用,網絡資源(如VPC、負載平衡器)可能計費。
  • 資源消耗**:網絡本身消耗極少主機資源,主要成本係工程師嘅管理時間。

喺 Docker Swarm 模式下,用 `docker network create` 建立網絡有咩特別要注意?

喺 Swarm 叢集中建立網絡,必須使用 `overlay` 驅動程式,先可以讓服務嘅容器跨主機通訊。建立指令需要加入 `--driver overlay` 參數,並且網絡會自動被加密。

  • 必須參數**:一定要指定 `--driver overlay`。
  • 網絡加密**:Overlay 網絡預設啟用數據鏈路層加密,提升安全性。
  • 附加選項**:可以使用 `--attachable` 參數,允許獨立容器(非服務任務)接入呢個 Swarm 網絡。

點樣將一個現有容器連接到新建立嘅自定義網絡?

將運行中或已停止嘅容器連接到新網絡非常簡單,使用 `docker network connect` 指令即可。呢個操作可以喺唔重新啟動容器嘅情況下,為其添加多個網絡介面。

  • 連接指令**:`docker network connect <網絡名稱> <容器名稱或ID>`。
  • 斷開連接**:使用 `docker network disconnect <網絡名稱> <容器名稱或ID>`。
  • 運行時連接**:喺用 `docker run` 啟動容器時,直接用 `--network <網絡名稱>` 參數指定。

建立網絡時,`--ipv6` 參數有咩用?2026年係咪更普及?

`--ipv6` 參數用於啟用該 Docker 網絡嘅 IPv6 支援。隨著 IPv4 地址枯竭,截至2026年,喺企業同雲端環境中部署支援 IPv6 嘅容器網絡已變得更加普遍同重要。

  • 啟用指令**:`docker network create --ipv6 --subnet=fd00:dead:beef::/48 my-ipv6-net`。
  • 雙棧支援**:Docker 網絡可以同時擁有 IPv4 同 IPv6 子網。
  • 未來考量**:規劃新系統時,建議預先啟用 IPv6 以備未來需求,避免後期遷移麻煩。

點樣清理同刪除唔再需要嘅 Docker 自定義網絡?

定期清理未使用嘅網絡係良好嘅系統管理習慣,可以避免混亂同潛在衝突。首先確保冇任何容器連接該網絡,然後使用 `docker network rm` 指令刪除。

  • 刪除單一網絡**:`docker network rm <網絡名稱或ID>`。
  • 清理所有閒置網絡**:使用 `docker network prune` 指令,會一次過刪除所有冇被容器使用嘅網絡。
  • 強制刪除**:如果網絡仍有容器,需先斷開所有連接,或使用 `docker network rm -f` 強制刪除(需謹慎)。

對於一個新手,喺2026年學習使用 `docker network create`,有咩實用嘅建議同常見陷阱要避開?

新手建議從最簡單嘅 bridge 網絡開始,理解基本概念後再學習 overlay 或 macvlan。最常見嘅陷阱係 IP 地址衝突同忘記網絡隔離導致嘅連接問題。

  • 由淺入深**:先掌握預設 bridge 同自定義 bridge 網絡嘅分別與用法。
  • 規劃 IP 地址**:為自定義網絡手動設定子網(`--subnet`),避免與主機網絡或其他 Docker 網絡重疊。
  • 善用診斷工具**:多用 `docker network inspect <網絡名稱>` 查看網絡詳細配置同連接嘅容器,方便除錯。