Docker - 网络使用详解2(创建自定义网络:user-defined)

作者: hangge 发布时间: 2019-09-06 浏览: 3388 次 编辑

容器除了可以直接使用 nonehostbridge 这三个自动创建的网络外,用户也可以根据业务需要创建 user-defined 网络。

二、创建自定义网络

Docker 提供三种 user-defined 网络驱动:bridgeoverlay 和 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 这个自定义网络已经创建成功了。

原文:Docker - 网络使用详解2(创建自定义网络:user-defined)


(3)使用 docker network inspect 命令可以查看这个网络的配置信息,这里的 172.18.0.0/16 是 Docker 自动分配的 IP 网段。

原文:Docker - 网络使用详解2(创建自定义网络:user-defined)


(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 网段。

原文:Docker - 网络使用详解2(创建自定义网络:user-defined)


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

原文:Docker - 网络使用详解2(创建自定义网络:user-defined)


(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 - 网络使用详解2(创建自定义网络:user-defined)


附:使用 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

原文:Docker - 网络使用详解2(创建自定义网络:user-defined)

(3)执行 docker network ls 命令可以看到 test_my_net 这个自定义网络确实已经创建成功。

原文:Docker - 网络使用详解2(创建自定义网络:user-defined)


(4)执行 docker inspect test_my_net 命令可以发现这个自定以网络中确实包含 bbox1 和 bbox2 这两个容器。

原文:Docker - 网络使用详解2(创建自定义网络:user-defined)


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 也加入进来了。

原文:Docker - 网络使用详解2(创建自定义网络:user-defined)


原文链接:https://www.hangge.com/blog/cache/detail_2475.html