1. 程式人生 > 其它 >docker網路模式

docker網路模式

檢視預設網路列表

安裝完docker後會自動建立網路,我們可以通過以下命令檢視存在的網路模式:

docker network ls
  • bridge模式: Docker預設的網路模式,為每一個容器分配IP等。
  • host模式: 和宿主機共享網路,容器不會虛擬出自己的網絡卡,IP等,而是使用宿主機的IP和埠。
  • none模式: 不配置網路。
  • container模式: 和指定的容器共享IP、埠範圍等。

建立容器時,可以使用 --network 選項指定容器的網路模式。

bridge模式

當 Docker 啟動時,會自動在主機上建立一個名為 docker0 的虛擬網橋,主機上啟動的 Docker 容器會連線到這個虛擬網橋上。同時Docker會隨機分配一個本地未佔用的私有網段中的一個地址給docker0介面。此後啟動的容器內的網口也會自動分配一個同一網段的地址。

當建立一個 Docker 容器的時候,同時會建立了一對 veth pair 介面。這對介面一端在容器內,即 eth0;另一端在本地並被掛載到 docker0 網橋,名稱以 veth 開頭。通過這種方式,主機可以跟容器通訊,容器之間也可以相互通訊。Docker 就建立了在主機和所有容器之間一個虛擬共享網路。

注:當我們自己建立網路的時候預設即是bridge模式。

建立自定義網橋

docker network create [OPTIONS] NETWORK

Options:

  • --attachable:預設 false,啟用手動容器安裝
  • --driver, -d:預設bridge,驅動程式管理網路
  • --gateway:用於主子網的IPv4或IPv6閘道器
  • --internal:預設 false,限制對網路的外部訪問
  • --ip-range:指定容器的IP範圍,格式同 --subnet 引數
  • --subnet:表示網段的 CIDR 格式的子網(如192.168.0.0/16)

示例:

$ docker network create -d bridge my-bridge2
49f6474bbab3fa86848fc1270589221c8e1b10d62917e2e6ff8485b41465293c
$ docker network ls
NETWORK ID     NAME                          DRIVER    SCOPE
d651f64b431e   bridge                        bridge    local
9ea6532107f7   host                          host      local
49f6474bbab3   my-bridge                     bridge    local
621f2f431b5d   my-bridge2                    bridge    local
cd8be57c82ab   none                          null      local

刪除網路

docker network rm NETWORK [NETWORK...]

示例:

$ docker network rm my-bridge2
my-bridge2
$ docker network ls
NETWORK ID     NAME                          DRIVER    SCOPE
d651f64b431e   bridge                        bridge    local
9ea6532107f7   host                          host      local
49f6474bbab3   my-bridge                     bridge    local
cd8be57c82ab   none                          null      local

網路資訊檢視

docker network inspect [OPTIONS] NETWORK [NETWORK...]

Options:

  • --format, -f:使用給定的模板格式化輸出

示例:

$ docker network inspect -f '{{json .IPAM.Config}}' bridge
[{"Subnet":"172.17.0.0/16","Gateway":"172.17.0.1"}]

將容器新增到網路中

為新建的容器指定my-bridge網路:

docker run --network my-bridge -dit --name mycentos1 centos bash

再啟動一個容器加入到my-bridge網路:

docker run --network my-bridge -dit --name mycentos2 centos bash

進入mycentos1容器檢視是否和mycentos2網路互通:

$ docker exec -it 62c3a18331e5 bash
[root@62c3a18331e5 /]# ping mycentos2
PING mycentos2 (172.21.0.3) 56(84) bytes of data.
64 bytes from mycentos2.my-bridge (172.21.0.3): icmp_seq=1 ttl=64 time=0.141 ms
64 bytes from mycentos2.my-bridge (172.21.0.3): icmp_seq=2 ttl=64 time=0.113 ms
64 bytes from mycentos2.my-bridge (172.21.0.3): icmp_seq=3 ttl=64 time=0.124 ms
  • 可以看到成功連線,同理在容器mycentos2中也會成功連線到容器mycentos1。

網路連線與斷開

可以將指定的容器與指定的網路進行連線或者斷開。

連線:

docker network connect [OPTIONS] NETWORK CONTAINER

Options:

  • --alias:為容器新增網路範圍的別名
  • --driver-opt:網路驅動程式選項
  • --ip:IPv4地址(例如 172.30.100.104)
  • --ip6:IPv6地址(例如 2001:db8::33)
  • --link:新增到另一個容器的連結
  • --link-local-ip:為容器新增連結本地地址

示例:

$ docker network connect my-bridge mycentos3

斷開:

docker network disconnect [OPTIONS] NETWORK CONTAINER

Options:

  • -f, --force:強制容器斷開網路的連線

示例:

$ docker network disconnect bridge mycentos3

host模式

如果啟動容器的時候使用host模式,那麼這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個 Network Namespace。容器將不會虛擬出自己的網絡卡,配置自己的 IP 等,而是使用宿主機的 IP 和埠。

docker run --network host -dit redis

none模式

使用none模式,docker 容器擁有自己獨立的 Network Namespace,但並沒有進行任何網路配置。即這個 docker 容器沒有網絡卡、IP、路由等資訊。需要我們自己為 docker 容器新增網絡卡、配置 IP 等。

該模式適合需要高度定製網路的使用者使用。