博客
关于我
09-docker系列-docker网络你了解多少(下)
阅读量:788 次
发布时间:2023-01-23

本文共 2449 字,大约阅读时间需要 8 分钟。

Docker网络模式深入实验与分析

环境设置

在本实验中,我们将使用一个基于Linux的操作系统进行测试,Docker环境已预先配置完成。通过对四种主要的Docker网络模式(Bridge、Host、Null、Contain)进行实践实验和验证,旨在深入理解Docker网络设置的根本原理和实际应用场景。


Bridge模式实验

方面目标

验证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

  • 实验结果

    • 容器成功启动,并显示80端口监听。
    • 浏览器访问显示NGinx欢迎页面,确认Bridge模式下容器能够与宿主机网络共享。

    Host模式实验

    方面目标

    验证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模式相同,但网络传输更加直接。

  • 实验结果

    • 容器的80端口直接暴露到宿主机网络。
    • 浏览器访问显示NGinx欢迎页面,确认Host模式下容器具备高性能网络通信能力。

    Null模式实验

    方面目标

    验证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

    结果应为“网络不可达”,确认容器的完全隔离状态。

  • 实验结果

    • 容器完全独立运行,无外部网络连接。
    • 测试结果显示互相之间无法通信,符合Null模式的设计特性。

    Contain模式实验

    方面目标

    验证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服务可及时访问。

  • 实验结果

    • 容器组内的服务能够相互通信,但无法直接从宿主机访问Nginx容器。
    • 浏览器访问显示NGinx欢迎页面,说明Nginx容器成功提供服务。

    总结

    通过本次实验,我们深入理解了Docker网络模式的运行机制及其适应场景:

  • Bridge模式:适用于需要与宿主机网络直接交互的场景。
  • Host模式:适用于需要高性能网络通信的高级场景。
  • Null模式:适用于极短时间或特定环境下的网络隔离需求。
  • Contain模式:适用于容器化应用的网络通信管理场景。
  • 这些模式的选择基于具体的应用需求,均能在Docker化环境中高效实现。

    转载地址:http://qteyk.baihongyu.com/

    你可能感兴趣的文章
    DRBD分布式存储解决方案实战
    查看>>
    DRBL+Clonezilla全自动批量安装操作系统
    查看>>
    DSMM数据安全概述
    查看>>
    Dva员工增删改查Demo实现-优化
    查看>>
    EasyUi的使用与代码编写(一)
    查看>>
    eclipse配置tomcat8.5报错The Apache Tomcat installation at this directory is version 8.5.4. A Tomcat
    查看>>
    eclipse配置xml的自动提示
    查看>>
    "不能为虚拟电脑 ubuntu 打开一个新任务"的解决办法
    查看>>
    eclipse重置页面恢复到最初布局状态
    查看>>
    ecmall开发记录(一)
    查看>>
    ecplise中创建jsp页面时默认的编码格式为ISO-8859-1,这里我们将其编码格式设置为utf-8...
    查看>>
    ECSHOP实现收货国家省市由选择下拉菜单改为手动
    查看>>
    ECShop模板原理
    查看>>
    edgeboxes proposal 和dpm 连接
    查看>>
    EdgeX Foundry:开启边缘计算新时代
    查看>>
    EdgeX Foundry:边缘计算的创新平台
    查看>>
    EdgeX Foundry:边缘计算的未来趋势与应用
    查看>>
    Edge浏览器打开控制台后程序总是停止进入debug模式关闭教程【八仙过海之又一过海方案】
    查看>>
    Educational Codeforces Round 28
    查看>>
    Educational Codeforces Round 47 (Rated for Div. 2)F. Dominant Indices 线段树合并
    查看>>