Loading

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模式。

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 等。

该模式适合需要高度定制网络的用户使用。

posted @ 2021-08-11 12:09  charlatte  阅读(123)  评论(0编辑  收藏  举报