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

这篇文章主要为大家介绍了Docker四种网络模式演示及连通性测试,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

Docker 的四种网络模式

网络模式网络配置说明
host(开放式网络模式)–network host容器和宿主机共享 Network namespace
container(联合挂载式网络模式)–network container多个容器共享一个 Network namespace
none(封闭式网络模式)–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 模式

在这里插入图片描述

如果启动容器的时候使用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 模式

在这里插入图片描述

这个模式指定 新创建的容器和已经存在的一个容器共享一个 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 模式

在这里插入图片描述

使用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进程启动时,会 在主机上创建一个名为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:  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网络模式连通性测试的资料请关注0133技术站其它相关文章!

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

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 站长技巧