docker network 是一个抽象层,连接到网络的容器能够去获得唯一的 IP 地址,该 IP 地址可以通过网络连接到其他的容器。
使用 docker network ls
可以查看当前存在的网络。 默认情况下,docker 包含三个网络,他们分别由不同的驱动程序提供。其中 bridge driver
(网桥)提供了容器之间互相连接的能力。host driver
提供了容器与主机之间相连接的能力。 null driver
则提供容器与外部隔绝连接的能力。
其中 scope
表示网络的作用范围,有三个值: local global swarm
。默认是 local
表示网络受限于本主机(本地),而 global
和 swarm
表示容器网络能够再集群(一大批机器) 里进行连通。
bridge network
docker 默认的 bridge
网络使用了 Linux 的 命名空间、虚拟网卡设备、防火墙而创建的虚拟网络。 桥接网络只能在单主机上面使用,它并不知道什么是集群,而且容器的 IP 地址不会被记录到机器(主机)的路由表上面。
创建一个新的网络可以使用 docker network create
命令,其中 --attachable
参数能运行容器在任意时候接入或离开该网络。
# 创建一个网络
docker network create --driver bridge \
--label project=aaa \
--label bbb=ccc \
--attachable \
--scope local \
--subnet 10.0.42.0/24 \
--ip-range 10.0.42.128/25 \
user-network
# 创建另一个网络,名字和网段要不同
docker network create --driver bridge \
--label project=aaa \
--label bbb=ccc \
--attachable \
--scope local \
--subnet 10.0.43.0/24 \
--ip-range 10.0.43.128/25 \
user-network2
# 对容器使用这个网络
docker run -it \
--network user-network \
--name network-explorer alpine:3.8 sh
## 会进入容器的命令行,输入 ip -f inet -4 -o addr
# 当然也可以附加到其他网络上面去
docker network connect user-network2 network-explorer
# 重启上面的容器,查看ip 信息
docker start -i network-explorer