在《Docker桥接网络入门》基础知识上,本文将通过实例来创建Docker的桥接网络,包括默认的桥接网络和用户自定义的桥接网络。并通过桥接网络和网络连接来测试各独立容器之间的连通性。
环境说明
1. 安装docker,可参考《Docker在CentOS系统中的安装》;
2. 容器alpine01和容器alpine02创建在默认桥接网络bridge上;
3. 容器alpine03、容器alpine04和容器alpine05创建在自定义的桥接网络alpine-net上;
4. 容器alpine05连接到bridge网桥上。
使用默认的桥接网络
1. 确认目前Docker宿主机的网络情况。
docker network ls
当前Docker宿主机上只有一个默认的桥接网络:f8f96ec60ff2
2. 启动容器alpine01和容器alpine02,并默认连接到bridge网桥上。
docker run -dit --name alpine01 alpine ashdocker run -dit --name alpine02 alpine ash
没有指定 --network标志,两个容器都将连接到默认bridge网络。
两容器已经正常启动如下:
3. 检查容器alpine01和容器alpine02是否正确连接到bridge网桥上。
docker network inspect bridge
上图可看出,默认网桥bridge的网关是172.17.0.1,子网:171.17.0.0/16
上图可以看到,容器alpine01和容器alpine02已经连接到bridge默认网桥上,且IP分配的IP地址分别是:172.17.0.4和172.17.0.5
4. 容器alpine01和容器alpine02连通性测试。
4.1进入容器alpine01内部
docker attach alpine01
4.2连通性测试ping外网和默认网桥内的其他节点。
ping -c 2 www.baidu.com
ping -c 2 172.17.0.5
从以上两个截图可以看出,内外均能连通。
使用用户自定义的桥接网络
1. 创建自定义网络alpine-net;
docker network create --driver bridge alpine-net
2. 查看alpine-net网络的详细情况;
docker network inspect alpine-net
自定义桥接网络alpine-net的网关是:172.22.0.1,子网:172.22.0.0/16
3. 在alpine-net上创建三个容器alpine03、alpine04和alpine05;
docker run -dit --name alpine03 --network alpine-net alpine ashdocker run -dit --name alpine04 --network alpine-net alpine ashdocker run -dit --name alpine05 --network alpine-net alpine ash
4. 再次查看alpine-net网络详情;
上图可以看到,容器alpine03、alpine04和容器alpine05已经连接到alpine-net网桥上,且分配的IP地址分别是:172.22.0.2、172.22.0.3和172.22.0.4
5. 连接alpine05到默认网桥bridge上;
docker network connect bridge alpine05
6. 再次查看bridge网络详情;
docker network inspect bridge
从上图可以看出,alpine05成功连接到bridge网桥上,IP地址为:172.17.0.6
7. 连通性测试
7.1进入容器alpine03
docker container attach alpine03
7.2测试与外网www.baidu.com以及内网172.22.0.3(alpine04)、172.22.0.4(alpine05)的连通性
由上图可以看出自定义网桥网络alpine-net内的节点与外网和内网中的其他节点均能ping通。
7.3 测试alpine-net 和 bridge之间的连通性
7.3.1进入alpine05
docker attach alpine05
7.3.2 ping alpine04(alpine-net中的节点)
Ping alpine04Ping 172.22.0.3
7.3.3 ping alpine01(bridge中的节点)
Ping alpine01Ping 172.17.0.4
从上图连通性测试结果来看,alpine05可以通过容器名或IP连通alpine-net网络中的任何节点,而对创建了链接的另一个网络bridge内的节点,只能通过IP地址连接访问。为什么呢?原因可以在《Docker桥接网络入门》中自行查找!
今天的分享就到这里,谢谢大家支持!