返回 导航

Docker / K8s

hangge.com

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

作者:hangge | 2019-06-27 08:52
容器除了可以直接使用 nonehostbridge 这三个自动创建的网络外,用户也可以根据业务需要创建 user-defined 网络。

二、创建自定义网络

Docker 提供三种 user-defined 网络驱动:bridgeoverlaymacvlan。其中 overlaymacvlan 用于创建跨主机的网络。本文主要介绍创建 bridge 自定义网络。

1,创建自定义的 bridge 网络

(1)我们执行如下命令通过 bridge 驱动创建一个类似 Docker 自带的 bridge 网络,网络名称为 my_net
docker network create --driver bridge my_net

(2)执行 docker network ls 命令可以看到 my_net 这个自定义网络已经创建成功了。

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

(4)我们可以在创建网络时通过 --subnet --gateway 参数来指定 IP 网段。
docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my_net2

(5)可以看到这个新的 bridge 网络使用的便是我们指定的 IP 网段。

2,使用自定义网络

(1)假设我们容器想要使用前面自定义的网络,在启动时通过 --network 指定即可。
docker run -it --network=my_net2 busybox

(2)由于 my_net2 网络 IP 网段为 172.22.16.0/24,这里可以看到容器分配到的 IP172.22.16.2

(3)我们可以在容器启动时通过 --ip 参数指定一个静态 IP,而不是从 subnet 中自动分配。
注意:只有使用 --subnet 参数创建的网络才能指定静态 IP。如果自定义网络创建时没有指定 --subnet,那么容器启动时指定静态 IP 就会报错。
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 ,具体内容如下: 
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 命令可以发现这个自定以网络中确实包含 bbox1bbox2 这两个容器。

2,加入已存在的网络

(1)假设我们还需再启动个容器 bbox3,并且需要加入现有的 test_my_net 这个网络。那么它的 docker-compose.yml 文件可以这么编写:
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 也加入进来了。
评论

全部评论(0)

回到顶部