【四月更文打卡】Docker 网络管理(5)-自定义网络

329 阅读4分钟

Docker 网络管理(5)-自定义网络

Docker 的自定义网络可以自定义 IP 地范围和网关等信息,实质是穿件一个可以 自定义的桥接网络给容器使用。其与默认的桥接网络有如下区别:

  1. 用户创建的桥接网络提供容器间自动 DNS 解析 在默认的桥接网络中的容器互相之间只能通过 IP 地址访问对方(使用--link 连接的容器除外)。在用户自定义的网络中,容器则可以使用容器名或容器别名 来解析对方。

  2. 用户创建的桥接网络提供更好的隔离 使用用户创建的桥接网络提供了具有作用域的网络(scoped network),只允许 加入到该网络的容器间互相通讯。而在创建容器时不指定网络的话就加入到默认 的桥接网络,这样不同业务或者不同技术栈的容器就能相互通讯,而生产中一般 是不允许这样的。

  3. 容器可以接入(attach)或者断开(detach)用户自定义的桥接网络并即时生效 在某容器的生命周期任意时刻,可以即时连接到用户定义的网络或从其断开。如果 要将容器从默认的桥接网络断开则需要停止容器,并使用不同的网络选项配置启动 新的容器。

  4. 每个用户自定义的网络都会新建一个可配置的网桥 如果容器使用的默认桥接网络,则所有容器使用相同的配置设定(如:MTU 和 iptables 规则等。)。更改默认的桥接网络配置需要重启 docker。用户创建的桥接网络使用 docker network create命令创建。如果不同的应用组需要不同的网络配置,则 可以更改每个组对应的用户自定义桥接网络。

  5. 使用 --link 选项连接的容器在默认网络中共享环境变量 最初,在两个容器之间共享环境变量的唯一方法只能使用--link选项实现。这种 共享环境变量的方式在用户自定义的桥接网络中是不可以使用的。但是,可以使用 其它更高级的方式来共享环境变量。如:

    1. 多个容器之间可以通过 docker 的数据卷挂载包含共享信息的文件或者目录。
    2. 多个容器可以使用docker-compose工具启动,compose 文件(.yaml/.yml) 可以定义共享的变量。
    3. 使用 swarm service

连接到相同的用户自定义桥接网络的容器会互相暴露端口。如果需要外部网络访问 容器,则必须使用-p--publish选项映射端口。

一. 创建自定义桥接网络

[root@docker-server-node1 ~]# docker network create -d bridge --subnet 10.200.0.0/24 --gateway 10.200.0.1 cus-net
1bdac1e7b929e2aa46d030e067fc469b119d74298ab815d46927a2046cb58dcd
[root@docker-server-node1 ~]# docker network list
NETWORK ID          NAME                DRIVER              SCOPE
dfe6872f18a8        bridge              bridge              local
1bdac1e7b929        cus-net             bridge              local
333954211ea9        harbor_harbor       bridge              local
a36a7fe27d63        host                host                local
23e18d8a54e0        none                null                local

二. 启动两个使用自定义网络的容器并通讯测试

2.1 启动容器

[root@docker-server-node1 ~]# docker run -it -d --name nginx-node1-use-cus-net --net=cus-net nginx:compiled_V1
0ac566096fe9674732ac29cf81e49308813368b58bb0140a42df35f86c337804
[root@docker-server-node1 ~]# docker run -it -d --name nginx-node2-use-cus-net --net=cus-net nginx:compiled_V1
df5816c94fe0637e05b2a5d0722078ae7ef132018f8d7b3b67a4af716b88f213
[root@docker-server-node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
df5816c94fe0        nginx:compiled_V1   "nginx -g 'daemon of…"   4 seconds ago       Up 4 seconds        80/tcp, 443/tcp     nginx-node2-use-cus-net
0ac566096fe9        nginx:compiled_V1   "nginx -g 'daemon of…"   16 seconds ago      Up 15 seconds       80/tcp, 443/tcp     nginx-node1-use-cus-net