博客
关于我
09-docker系列-docker网络你了解多少(下)
阅读量:799 次
发布时间: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/

    你可能感兴趣的文章
    Mysql order by与limit混用陷阱
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    mysql order by多个字段排序
    查看>>
    MySQL Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>
    mysql replace first,MySQL中处理各种重复的一些方法
    查看>>
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    mysql replace用法
    查看>>
    Mysql Row_Format 参数讲解
    查看>>
    mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
    查看>>
    MySQL Server 5.5安装记录
    查看>>
    mysql server has gone away
    查看>>
    mysql skip-grant-tables_MySQL root用户忘记密码怎么办?修改密码方法:skip-grant-tables
    查看>>
    mysql slave 停了_slave 停止。求解决方法
    查看>>
    MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
    查看>>
    MYSQL sql语句针对数据记录时间范围查询的效率对比
    查看>>
    mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
    查看>>
    mysql sysbench测试安装及命令
    查看>>
    mysql Timestamp时间隔了8小时
    查看>>
    Mysql tinyint(1)与tinyint(4)的区别
    查看>>