docker network create
描述 | 建立網路 |
---|---|
用法 | docker network create [OPTIONS] NETWORK |
描述
建立一個新網路。`DRIVER` 接受 `bridge` 或 `overlay`,它們是內建網路驅動。如果您安裝了第三方或您自己的自定義網路驅動,您也可以在此處指定該 `DRIVER`。如果您不指定 `--driver` 選項,該命令會自動為您建立一個 `bridge` 網路。當您安裝 Docker Engine 時,它會自動建立一個 `bridge` 網路。此網路對應於 Docker Engine 傳統上依賴的 `docker0` 網橋。當您使用 `docker run` 啟動新容器時,它會自動連線到此網橋網路。您不能刪除此預設網橋網路,但可以使用 `network create` 命令建立新網橋網路。
$ docker network create -d bridge my-bridge-network
網橋網路是在單個 Docker Engine 安裝上的隔離網路。如果您想建立跨多個執行 Docker Engine 的 Docker 主機的網路,您必須啟用 Swarm 模式,並建立 `overlay` 網路。要了解有關 Swarm 模式下 overlay 網路的更多資訊,請參閱“使用 overlay 網路”。
啟用 Swarm 模式後,您可以建立 Swarm 範圍的 overlay 網路。
$ docker network create --scope=swarm --attachable -d overlay my-multihost-network
預設情況下,Swarm 範圍的網路不允許手動啟動的容器連線。此限制旨在防止對 Swarm 叢集中非管理節點具有訪問許可權的人員執行能夠訪問 Swarm 服務網路堆疊的容器。
上面示例中使用的 `--attachable` 選項停用了此限制,並允許 Swarm 服務和手動啟動的容器都連線到 overlay 網路。
網路名稱必須是唯一的。Docker 守護程式嘗試識別命名衝突,但這不能保證。使用者有責任避免名稱衝突。
Overlay 網路限制
在使用預設的基於 VIP 的端點模式建立網路時,您應該使用 `/24` 塊(預設值)建立 overlay 網路,這將使您限制在 256 個 IP 地址。此建議解決了Swarm 模式的限制。如果您需要超過 256 個 IP 地址,請不要增加 IP 塊大小。您可以將 `dnsrr` 端點模式與外部負載均衡器結合使用,或者使用多個較小的 overlay 網路。有關不同端點模式的更多資訊,請參閱配置服務發現。
選項
選項 | 預設值 | 描述 |
---|---|---|
--attachable | API 1.25+ 啟用手動容器連線 | |
--aux-address | 網路驅動程式使用的輔助 IPv4 或 IPv6 地址 | |
--config-from | API 1.30+ 從中複製配置的網路 | |
--config-only | API 1.30+ 建立僅配置網路 | |
-d, --driver | bridge | 管理網路的驅動程式 |
--gateway | 主子網的 IPv4 或 IPv6 閘道器 | |
--ingress | API 1.29+ 建立 Swarm 路由網格網路 | |
--internal | 限制對網路的外部訪問 | |
--ip-range | 從子範圍分配容器 IP | |
--ipam-driver | IP 地址管理驅動程式 | |
--ipam-opt | 設定 IPAM 驅動程式特定選項 | |
--ipv4 | true | 啟用或停用 IPv4 地址分配 |
--ipv6 | 啟用或停用 IPv6 地址分配 | |
--label | 設定網路元資料 | |
-o, --opt | 設定驅動程式特定選項 | |
--scope | API 1.30+ 控制網路的範圍 | |
--subnet | 表示網路分段的 CIDR 格式子網 |
示例
連線容器
啟動容器時,使用 `--network` 標誌將其連線到網路。此示例將 `busybox` 容器新增到 `mynet` 網路。
$ docker run -itd --network=mynet busybox
如果要在容器執行後將其新增到網路,請使用 `docker network connect` 子命令。
您可以將多個容器連線到同一個網路。連線後,容器只能使用另一個容器的 IP 地址或名稱進行通訊。對於支援多主機連線的 `overlay` 網路或自定義外掛,連線到同一個多主機網路但從不同守護程式啟動的容器也可以透過這種方式進行通訊。
您可以使用 `docker network disconnect` 命令將容器從網路中斷開。
指定高階選項
建立網路時,Docker Engine 預設會為網路建立一個不重疊的子網。此子網不是現有網路的細分。它純粹用於 IP 地址分配。您可以覆蓋此預設值並直接使用 `--subnet` 選項指定子網值。在 `bridge` 網路上,您只能建立一個子網。
$ docker network create --driver=bridge --subnet=192.168.0.0/16 br0
此外,您還可以指定 `--gateway`、`--ip-range` 和 `--aux-address` 選項。
$ docker network create \
--driver=bridge \
--subnet=172.28.0.0/16 \
--ip-range=172.28.5.0/24 \
--gateway=172.28.5.254 \
br0
如果您省略 `--gateway` 標誌,Docker Engine 會從首選池中為您選擇一個。對於 `overlay` 網路和支援它的網路驅動外掛,您可以建立多個子網。此示例使用兩個 `/25` 子網掩碼,以符合當前建議的單個 overlay 網路中不超過 256 個 IP 的指導。每個子網都有 126 個可用地址。
$ docker network create -d overlay \
--subnet=192.168.10.0/25 \
--subnet=192.168.20.0/25 \
--gateway=192.168.10.100 \
--gateway=192.168.20.100 \
--aux-address="my-router=192.168.10.5" --aux-address="my-switch=192.168.10.6" \
--aux-address="my-printer=192.168.20.5" --aux-address="my-nas=192.168.20.6" \
my-multihost-network
請確保您的子網不重疊。如果重疊,網路建立將失敗,Docker Engine 將返回錯誤。
Bridge 驅動程式選項
建立自定義 `bridge` 網路時,可以傳遞以下附加選項。其中一些具有等效的標誌,可以在 dockerd 命令列或 `daemon.json` 中用於配置預設的 bridge `docker0`。
網路建立選項 | 用於 `docker0` 的守護程式選項 | 描述 |
---|---|---|
com.docker.network.bridge.name | - | 建立 Linux 網橋時使用的網橋名稱 |
com.docker.network.bridge.enable_ip_masquerade | --ip-masq | 啟用 IP 偽裝 |
com.docker.network.bridge.enable_icc | --icc | 啟用或停用容器間連線 |
com.docker.network.bridge.host_binding_ipv4 | --ip | 繫結容器埠時的預設 IP |
com.docker.network.driver.mtu | --mtu | 設定容器網路 MTU |
com.docker.network.container_iface_prefix | - | 設定容器介面的自定義字首 |
以下引數可以傳遞給 `docker network create` 用於任何網路驅動程式,同樣,它們與用於 `docker0` 網橋的 Docker 守護程式標誌大致等效。
網路建立選項 | 用於 `docker0` 的守護程式選項 | 描述 |
---|---|---|
--gateway | - | 主子網的 IPv4 或 IPv6 閘道器 |
--ip-range | --fixed-cidr , --fixed-cidr-v6 | 從範圍分配 IP 地址 |
--internal | - | 限制對網路的外部訪問 |
--ipv4 | - | 啟用或停用 IPv4 地址分配 |
--ipv6 | --ipv6 | 啟用或停用 IPv6 地址分配 |
--subnet | --bip , --bip6 | 網路的子網 |
例如,讓我們使用 `-o` 或 `--opt` 選項在釋出埠時指定 IP 地址繫結。
$ docker network create \
-o "com.docker.network.bridge.host_binding_ipv4"="172.19.0.1" \
simple-network
網路內部模式 (--internal)
內部網路上的容器可以相互通訊,但不能與任何其他網路通訊,因為沒有配置預設路由,並且設定了防火牆規則以丟棄所有進出其他網路的流量。與閘道器 IP 地址(以及因此適當配置的主機服務)的通訊是可能的,並且主機可以直接與任何容器 IP 通訊。
預設情況下,當您將容器連線到 `overlay` 網路時,Docker 還會將一個網橋網路連線到它以提供外部連線。如果您想建立外部隔離的 `overlay` 網路,可以指定 `--internal` 選項。
網路入口模式 (--ingress)
您可以建立用於在 Swarm 叢集中提供路由網格的網路。您可以在建立網路時透過指定 `--ingress` 來完成此操作。一次只能建立一個入口網路。只有當沒有服務依賴它時才能刪除該網路。建立 overlay 網路時可用的任何選項在建立入口網路時也可用,除了 `--attachable` 選項。
$ docker network create -d overlay \
--subnet=10.11.0.0/16 \
--ingress \
--opt com.docker.network.driver.mtu=9216 \
--opt encrypted=true \
my-ingress-network
在預定義網路上執行服務
您可以在預定義的 Docker 網路 `bridge` 和 `host` 上建立服務。
$ docker service create --name my-service \
--network host \
--replicas 2 \
busybox top
具有本地範圍驅動程式的 Swarm 網路
您可以使用本地範圍網路驅動程式建立 Swarm 網路。您可以透過在建立網路時將網路範圍提升為 `swarm` 來完成此操作。然後,您可以在建立服務時使用此網路。
$ docker network create -d bridge \
--scope swarm \
--attachable \
swarm-network
對於提供跨主機連線的網路驅動程式(例如 macvlan),如果需要節點特定配置才能在每個主機上設定網路,您將透過僅配置網路提供該配置。當您建立 Swarm 範圍的網路時,您將指定包含配置的網路的名稱。
node1$ docker network create --config-only --subnet 192.168.100.0/24 --gateway 192.168.100.115 mv-config
node2$ docker network create --config-only --subnet 192.168.200.0/24 --gateway 192.168.200.202 mv-config
node1$ docker network create -d macvlan --scope swarm --config-from mv-config --attachable swarm-network