容器除了可以直接使用 none、host、bridge 这三个自动创建的网络外,用户也可以根据业务需要创建 user-defined 网络。
二、创建自定义网络
Docker 提供三种 user-defined 网络驱动:bridge,overlay 和 macvlan。其中 overlay 和 macvlan 用于创建跨主机的网络。本文主要介绍创建 bridge 自定义网络。
1,创建自定义的 bridge 网络
(1)我们执行如下命令通过 bridge 驱动创建一个类似 Docker 自带的 bridge 网络,网络名称为 my_net
1 | docker network create --driver bridge my_net |
(2)执行 docker network ls 命令可以看到 my_net 这个自定义网络已经创建成功了。
(3)使用 docker network inspect 命令可以查看这个网络的配置信息,这里的 172.18.0.0/16 是 Docker 自动分配的 IP 网段。
(4)我们可以在创建网络时通过 --subnet 和 --gateway 参数来指定 IP 网段。
1 | docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my_net2 |
(5)可以看到这个新的 bridge 网络使用的便是我们指定的 IP 网段。
2,使用自定义网络
(1)假设我们容器想要使用前面自定义的网络,在启动时通过 --network 指定即可。
1 | docker run -it --network=my_net2 busybox |
(2)由于 my_net2 网络 IP 网段为 172.22.16.0/24,这里可以看到容器分配到的 IP 为 172.22.16.2
(3)我们可以在容器启动时通过 --ip 参数指定一个静态 IP,而不是从 subnet 中自动分配。
注意:只有使用 --subnet 参数创建的网络才能指定静态 IP。如果自定义网络创建时没有指定 --subnet,那么容器启动时指定静态 IP 就会报错。
1 | docker run -it --network=my_net2 --ip 172.22.16.8 busybox |
(4)可以看到容器已经使用我们指定的 172.22.16.8 这个 IP 了。
附:使用 Docker Compose 文件创建自定义网络
1,同时创建网络、以及需要加入这个网络的容器
(1)首先创建一个 docker-compose.yml ,具体内容如下:
通过 bridge 驱动创建一个自定义网络 my_net。
同时运行两个容器,且它们都同属于 my_net 网络。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | version: '3' services: bbox1: image: busybox container_name: bbox1 entrypoint: # 容器启动后执行 top 命令,使容器没法立即退出 - top networks: - my_net bbox2: image: busybox container_name: bbox2 entrypoint: # 容器启动后执行 top 命令,使容器没法立即退出 - top networks: - my_net networks: my_net: driver: "bridge" |
(2)接着执行 docker-compose up -d 命令启动服务。
注意:由于 docker-compose.yml 文件是在 test 文件夹下,最终创建的自定义网络名则为 test_my_net
(3)执行 docker network ls 命令可以看到 test_my_net 这个自定义网络确实已经创建成功。
(4)执行 docker inspect test_my_net 命令可以发现这个自定以网络中确实包含 bbox1 和 bbox2 这两个容器。
2,加入已存在的网络
(1)假设我们还需再启动个容器 bbox3,并且需要加入现有的 test_my_net 这个网络。那么它的 docker-compose.yml 文件可以这么编写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | version: '3' services: bbox3: image: busybox container_name: bbox3 entrypoint: # 容器启动后执行 top 命令,使容器没法立即退出 - top networks: - my_net networks: my_net: external: name: test_my_net |
(2)启动服务后再次查看 test_my_net 网络,可以发现 bbox3 也加入进来了。
原文链接:https://www.hangge.com/blog/cache/detail_2475.html