Docker四种网络模式演示及连通性测试

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/
目录Docker 的四种网络模式host 模式host 模式演示container 模式container 模式演示none 模式none 模式演bridge 模式 bridge 模式演示

Docker 的四种网络模式

网络模式网络配置说明host(开放式网络模式)–network host容器和宿主机共享 Network namespacecontainer(联合挂载式网络模式)–network container多个容器共享一个 Network namespacenone(封闭式网络模式)–network none将容器放置在它自己的网络栈中,但是并不进行任何配置,该模式关闭了容器的网络功能bridge(桥接式网络模式)–network bridgeDocker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等

docker network 查看 docker 网络模式

[root@docker ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 15791bf83278 bridge bridge local df75b40e39f6 host host local f89ee64125bc none null local

docker run –network 命令可以指定使用的网络模式

host 模式

Docker四种网络模式演示及连通性测试插图

如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace 。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口 。但是, 容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的 。

使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。

host 模式演示

以 host 网路模式运行容器centos

[root@docker ~]# docker run -itd –name centos –network host centos:latest

查看该容器的网络模式

[root@docker ~]# docker inspect 40c4e28bd29c | grep -i network “NetworkMode”: “host”, “NetworkSettings”: { “Networks”: { “NetworkID”: “df75b40e39f671cbc4d287fefce8b7b64819fcad453cfe7f34831f6490480760”,

查看容器 IP

[root@docker ~]# docker exec -it $(docker ps -q) hostname -I 192.168.117.130 172.17.0.1

container 模式

Docker四种网络模式演示及连通性测试插图1

这个模式指定 新创建的容器和已经存在的一个容器共享一个 Network Namespace ,而不是和宿主机共享。 新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围 等。同样, 两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的 。两个容器的进程可以通过 lo 网卡设备通信。

container 模式演示

使用 bridge 网络模式启动一个 centos_1 容器

[root@docker ~]# docker run -itd –name centos_1 –network bridge centos:latest 10ec9d1e3a6b7530cff797cdfc2c44702b62f9f29dcee679306a0262d1e41226 #查看该容器的网络模式 [root@docker ~]# docker inspect 10ec9d1e3a6b | grep -i network “NetworkMode”: “bridge”, “NetworkSettings”: { “Networks”: { “NetworkID”: “ae7c4bfdd3910f8a00cb962afd06cf296d7d04a99611a6ab154d496ca777183b”, #查看容器IP [root@docker ~]# docker exec -it 10ec9d1e3a6b hostname -I 172.17.0.2

使用 container 网络模式启动一个 centos_2 容器

[root@docker ~]# docker run -itd –name centos_2 –network container:centos_1 centos:latest 1f7d976b3f80dd064fd87902dacefc72b617acc6f7917a2f0adb434cb5ff0d11 #查看该容器的网络模式 [root@docker ~]# docker inspect 1f7d976b3f80 | grep -i network “NetworkMode”: “container:centos_1”, “NetworkSettings”: { “Networks”: {} #查看容器IP [root@docker ~]# docker exec -it 1f7d976b3f80 hostname -I 172.17.0.2

测试 centos_2 与宿主机的连通性

#通信正常 [root@docker ~]# docker exec -it 1f7d976b3f80 ping 192.168.117.130 PING 192.168.117.130 (192.168.117.130) 56(84) bytes of data. 64 bytes from 192.168.117.130: icmp_seq=1 ttl=64 time=0.135 ms 64 bytes from 192.168.117.130: icmp_seq=2 ttl=64 time=0.046 ms 64 bytes from 192.168.117.130: icmp_seq=3 ttl=64 time=0.057 ms

测试 centos_2 与外网的连通性

#通信正常 [root@docker ~]# docker exec -it 1f7d976b3f80 ping www.baidu.com PING www.a.shifen.com (61.135.185.32) 56(84) bytes of data. 64 bytes from 61.135.185.32 (61.135.185.32): icmp_seq=1 ttl=127 time=4.45 ms 64 bytes from 61.135.185.32 (61.135.185.32): icmp_seq=2 ttl=127 time=4.27 ms

none 模式

Docker四种网络模式演示及连通性测试插图2

使用none模式,Docker容器拥有自己的Network Namespace,但是, 并不为Docker容器进行任何网络配置 。也就是说,这个Docker容器没有网卡、IP、路由等信息,只有lo 网络接口。需要我们自己为Docker容器添加网卡、配置IP等。

不参与网络通信,运行于此类容器中的进程仅能访问本地回环接口;仅适用于进程无须网络通信的场景中,例如:备份进程诊断及各种离线任务等。

 none 模式演示

使用 none 网络模式启动一个 centos_1 容器

[root@docker ~]# docker run -itd –name centos_1 –network none centos:latest b70dddea0a3a554c0c658442fcce8950a272148192b9622a1c5e6baa92be705c #查看该容器的网络模式 [root@docker ~]# docker inspect b70dddea0a3a | grep -i network “NetworkMode”: “none”, “NetworkSettings”: { “Networks”: { “NetworkID”: “f89ee64125bc9606a0e30f5d6c52d21bbdd10b14cd32191c783967a41675497c”, #查看容器IP [root@docker ~]# docker exec -it b70dddea0a3a hostname -I #IP为空

测试 centos_1 与宿主机的连通性

#无法通信 [root@docker ~]# docker exec -it b70dddea0a3a ping 192.168.117.130 connect: Network is unreachable

bridge 模式

Docker四种网络模式演示及连通性测试插图3

当Docker进程启动时,会 在主机上创建一个名为docker0的虚拟网桥 ,此主机上启动的 Docker容器会连接到这个虚拟网桥上, 所以有默认地址172.17.0.1/16的地址。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

从 docker0子网中分配一个IP给容器使用 ,并设置 docker0的IP地址为容器的默认网关 。在主机上 创建一对虚拟网卡 veth pair设备,Docker将veth pair设备的 一端放在新创建的容器 中,并命名为eth0(容器的网卡), 另一端放在主机中 ,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。

#如果您的主机没有 brctl 命令,请安装网桥管理工具包 [root@docker ~]# yum install -y bridge-utils #查看网桥 [root@docker ~]# brctl show bridge name bridge id STP enabled interfaces docker0 8000.02426f470008 no

bridge模式是docker的默认网络模式,不写–net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。

bridge 模式演示

创建一个网桥 centos-net

[root@docker ~]# docker network create -d bridge centos-net 1d8d918c3488b0e5b3f15ecd5c35c1dc36a87c66dc39fa38fbefcdc6ef471218 #查看创建的网桥 [root@docker ~]# brctl show bridge name bridge id STP enabled interfaces #新创建的网桥 br-1d8d918c3488 8000.024297951600 no #系统默认的网桥 docker0 8000.02426f470008 no [root@docker ~]# ip a 8: br-1d8d918c3488: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:97:95:16:00 brd ff:ff:ff:ff:ff:ff inet 172.18.0.1/16 scope global br-1d8d918c3488 valid_lft forever preferred_lft forever

使用 bridge 网络模式启动一个 centos_1 容器

[root@docker ~]# docker run -itd –name centos_1 –network centos-net centos:latest f5bdd3510cc84a6fdeef10f062589770daa663aa31855131cab3fa0627e98d3d #查看该容器的网络模式 [root@docker ~]# docker inspect f5bdd3510cc8 | grep -i network “NetworkMode”: “centos-net”, “NetworkSettings”: { “Networks”: { “NetworkID”: “1d8d918c3488b0e5b3f15ecd5c35c1dc36a87c66dc39fa38fbefcdc6ef471218”, #查看容器IP [root@docker ~]# docker exec -it f5bdd3510cc8 hostname -I 172.18.0.2

使用 bridge 网络模式启动一个 centos_2 容器

[root@docker ~]# docker run -itd –name centos_2 –network centos-net centos:latest #查看该容器的网络模式 [root@docker ~]# docker inspect $(docker ps -n 1 -q ) | grep -i network “NetworkMode”: “centos-net”, “NetworkSettings”: { “Networks”: { “NetworkID”: “1d8d918c3488b0e5b3f15ecd5c35c1dc36a87c66dc39fa38fbefcdc6ef471218”, #查看容器IP [root@docker ~]# docker exec -it $(docker ps -n 1 -q ) hostname -I 172.18.0.3

查看网桥连接状况

[root@docker ~]# brctl show bridge name bridge id STP enabled interfaces br-1d8d918c3488 8000.024297951600 no veth44c8534 vethef015ff docker0 8000.02426f470008 no

测试容器之间的连通性

[root@docker ~]# docker exec -it f5bdd3510cc8 ping 172.18.0.3 PING 172.18.0.3 (172.18.0.3) 56(84) bytes of data. 64 bytes from 172.18.0.3: icmp_seq=1 ttl=64 time=0.104 ms 64 bytes from 172.18.0.3: icmp_seq=2 ttl=64 time=0.046 ms 64 bytes from 172.18.0.3: icmp_seq=3 ttl=64 time=0.045 ms

测试容器与宿主机间的连通性

#容器 centos_1 与宿主机间的连通性 [root@docker ~]# docker exec -it f5bdd3510cc8 ping 192.168.117.130 PING 192.168.117.130 (192.168.117.130) 56(84) bytes of data. 64 bytes from 192.168.117.130: icmp_seq=1 ttl=64 time=0.102 ms 64 bytes from 192.168.117.130: icmp_seq=2 ttl=64 time=0.042 ms #容器 centos_2 与宿主机间的连通性 [root@docker ~]# docker exec -it 78854ab16473 ping 192.168.117.130 PING 192.168.117.130 (192.168.117.130) 56(84) bytes of data. 64 bytes from 192.168.117.130: icmp_seq=1 ttl=64 time=0.103 ms 64 bytes from 192.168.117.130: icmp_seq=2 ttl=64 time=0.043 ms

以上就是Docker四种网络模式演示及连通性测试的详细内容,更多关于Docker网络模式连通性测试的资料请关注其它相关文章!

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容