Docker 网络管理(5)-自定义网络
Docker 的自定义网络可以自定义 IP 地范围和网关等信息,实质是穿件一个可以 自定义的桥接网络给容器使用。其与默认的桥接网络有如下区别:
-
用户创建的桥接网络提供容器间自动 DNS 解析 在默认的桥接网络中的容器互相之间只能通过 IP 地址访问对方(使用
--link连接的容器除外)。在用户自定义的网络中,容器则可以使用容器名或容器别名 来解析对方。 -
用户创建的桥接网络提供更好的隔离 使用用户创建的桥接网络提供了具有作用域的网络(scoped network),只允许 加入到该网络的容器间互相通讯。而在创建容器时不指定网络的话就加入到默认 的桥接网络,这样不同业务或者不同技术栈的容器就能相互通讯,而生产中一般 是不允许这样的。
-
容器可以接入(attach)或者断开(detach)用户自定义的桥接网络并即时生效 在某容器的生命周期任意时刻,可以即时连接到用户定义的网络或从其断开。如果 要将容器从默认的桥接网络断开则需要停止容器,并使用不同的网络选项配置启动 新的容器。
-
每个用户自定义的网络都会新建一个可配置的网桥 如果容器使用的默认桥接网络,则所有容器使用相同的配置设定(如:MTU 和 iptables 规则等。)。更改默认的桥接网络配置需要重启 docker。用户创建的桥接网络使用
docker network create命令创建。如果不同的应用组需要不同的网络配置,则 可以更改每个组对应的用户自定义桥接网络。 -
使用
--link选项连接的容器在默认网络中共享环境变量 最初,在两个容器之间共享环境变量的唯一方法只能使用--link选项实现。这种 共享环境变量的方式在用户自定义的桥接网络中是不可以使用的。但是,可以使用 其它更高级的方式来共享环境变量。如:- 多个容器之间可以通过 docker 的数据卷挂载包含共享信息的文件或者目录。
- 多个容器可以使用
docker-compose工具启动,compose 文件(.yaml/.yml) 可以定义共享的变量。 - 使用 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