本文共 2449 字,大约阅读时间需要 8 分钟。
在本实验中,我们将使用一个基于Linux的操作系统进行测试,Docker环境已预先配置完成。通过对四种主要的Docker网络模式(Bridge、Host、Null、Contain)进行实践实验和验证,旨在深入理解Docker网络设置的根本原理和实际应用场景。
验证Bridge模式下的容器是否能够与宿主机共享网络,并确保容器能够通过Bridge接口访问外部网络。
启动Nginx镜像并映射端口
使用Docker命令启动一个NGinx镜像,并将宿主机的80端口与容器的80端口映射:sudo docker run -d -p 80:80 nginx
这一步将使宿主机的80端口 trafic将被转发到容器内部。
验证网络连接
使用netstat工具查看端口状态:sudo netstat -tuln | grep 80
预期输出应显示宿主机的80端口被监听。
防火墙设置
开通宿主机防火墙的80端口:sudo firewall-cmd --add-port=80/tcp --permanentsudo firewall-cmd --reload
使用浏览器访问验证
访问宿主机的IP地址加上80端口:http://宿主机IP:80
在实验环境中,假设宿主机IP为192.168.1.100
,访问路径为http://192.168.1.100:80
。
验证Host模式下的容器是否能够直接共享宿主机的网络接口,省去传统Bridge模式的路由转发步骤。
停止前一次容器
如果之前运行了Bridge模式的容器,需先停止以避免端口冲突:sudo docker stop
启动Nginx镜像
使用--net=host
选项启动Nginx镜像,使它直接绑定宿主机的网络接口:sudo docker run -d --net=host nginx
防火墙设置
查看防火墙状态确认80端口是否开放:sudo firewall-cmd --list-port=80/tcp
如已开启,则无需重复操作,否则按照Bridge模式处理。
使用浏览器访问验证
访问宿主机IP地址加上80端口:http://宿主机IP:80
预期结果与Bridge模式相同,但网络传输更加直接。
验证Null模式下的容器是否独立运行,具备完全隔离的网络环境。
停止前一次容器
停止先前的任何Docker容器:sudo docker stop
启动Nginx镜像
使用--net=none
选项启动一个完全隔离的Nginx镜像:sudo docker run -d --net=none nginx
验证网络通信
使用Docker容器的 vX.Y.Z Ip地址进行emouth机内通信测试:ping 192.168.1.150
注意:该容器无法直接连接外部网络,因此结果应为“网络不可达”。
启动辅助容器
为验证Null模式的隔离特性,启动一个辅助CentOS容器:sudo docker run -it --net=none centos:7 /bin/bash
进入容器后尝试ping宿主机IP:
ping 192.168.1.100
结果应为“网络不可达”,确认容器的完全隔离状态。
验证Contain模式下的容器是否能够保护宿主机网络,并分别为每个容器分配独立IP地址。
启动基础容器
首先启动一个教背景的CentOS容器,用于作为后续测试的基础:sudo docker run -d centos:7 /bin/bash -c "while true; do echo yunweijia; sleep 5; done"
这一步将生成一个长时间运行的容器,用于后续网络测试。
启动Contain模式的Nginx容器
使用--net=container
选项绑定到宿主机的control group:sudo docker run -d --net=container:8dac7 nginx
这里的8dac7
是上述CentOS容器的ID。
验证网络通信
检查CentOS容器与Nginx容器之间的网络状态:ping 172.17.0.2
注意:结果应为“不可达”,因为Contain模式下容器之间共享相同的control group。
直接访问Nginx容器
使用curl命令访问其IP地址:curl http://172.17.0.2
预期将显示Nginx欢迎页面,说明容器间的网络通信已成功。
使用浏览器访问
浏览器直接访问http://172.17.0.2
,确认Nginx服务可及时访问。通过本次实验,我们深入理解了Docker网络模式的运行机制及其适应场景:
这些模式的选择基于具体的应用需求,均能在Docker化环境中高效实现。
转载地址:http://qteyk.baihongyu.com/