当前位置: 首页 > article >正文

docker 网络详解

        在平常的开发工作中,我们经常需要部署项目,在编写 docker-compose.yml 文件的时候,经常会看到 network 网络相关编写,那么 Docker 网络具体是什么呢?在项目中有什么作用呢?下面我们总结下 Docker 网络。

     1:概述        

        Docker 网络主要是用于连接 Docker 容器的网络技术,容器可以通过虚拟网络来通信,用于实现容器之间通信以及容器与外部资源进行通信。默认情况下,每个容器都是隔离的。Docker 网络为应用程序定义了隔离边界,确保了容器之间的通信、容器与外部资源的通信。创建不同的网络,容器分布在不同的网络中,可以实现容器之间的隔离,提高安全性。

     2:Docker 网络类型

        (1):bridge:桥接网络,这是 Docker 默认的网络模式,同一桥接网络上的容器可以使用 ip 地址或容器名称进行互相通信,容器与外部的连接需要通过端口映射。

        使用场景:适合单主机多容器之间的通信,如开发环境服务部署包括数据库、后端服务等,之间可以通过 bridge 网络模式通信,只能和同一台主机上的容器进行通信。

        优点:Docker 网络默认使用 bridge 网络模式,运行容器会自动连接到默认的 docker0网桥,并获得私有 ip。每个容器在 bridge 网络中有自己独立的网络栈,容器之间互相隔离。容器之间通信方便。

        缺点:跨主机通信不支持。

        (2):host:主机网络,容器会共享宿主机的网络端口,直接使用主机的网络接口,性能高。隔离性会降低,安全性比较差。

        使用场景:网络性能要求高的场景,如实时数据处理等。适用于信任容器之间的通信。

        优点:直接使用宿主机的网络栈,避免了网络地址转换(NAT)和网桥转发带来的性能损耗,所以性能高,适用于实时数据处理系统、高吞吐量的服务等。无需进行端口映射,减少端口冲突的问题。容器可以更方便的与外部网络进行交互。

        缺点:隔离性降低,安全性较差,如果受到攻击,可能会影响整个系统的运行。host 网络模式依赖宿主机的网络环境,导致迁移性比较差。容易导致端口冲突。

        (3):none:无网络,主要用于某些特殊的场景,与外部网络及其他容器完全隔离,外界无法访问,安全性好。

        使用场景:处理个人隐私数据、敏感的数据。

        优点:有效防止了网络攻击,安全性比较高。没有网络性能开销,提高了任务执行的性能。

        缺点:容器无法访问外部资源、数据交互复杂。

        (4):Overlay:覆盖网络,主要用于 Docker Swarm 或  Kubernetes 等容器编排工具构建的集群中,如数据库服务、后端服务等,使用覆盖网络服务之间通信更加便捷,支持不同 Docker 守护进程上的容器之间的网络连接。这种模式 Docker 会创建一个虚拟网络, 不同主机上的容器连接到这个虚拟网络,所有连接到这个虚拟网络的容器都可以互相通信。

        使用场景:跨多个 Docker 容器之间的通信,分布式应用部署、集群环境搭建。

        优点:允许不同 Docker 宿主机上的容器直接通信,可以通过 ip 或者服务名进行通信。网络隔离性好,可以创建不同的覆盖网络,从而提高了系统的安全性。可以更加方便的进行拓展。

        缺点:覆盖网络在数据传输过程中进行数据封装和解封,导致有一定的性能损耗。网络管理比较复杂,由于涉及到多宿主机、多个网络环境,如果出现问题,排查问题难度比较大

        (5):Macvlan 网络:容器有自己的 MAC 地址,容器可以直接连到宿主机的物理网络。

        使用场景:直接访问物理网络的场景,如连接打印机等。

        优点:网络隔离性好、性能较高。

        缺点:配置复杂。

      3:Docker 网络常用命令

        (1):查看所有的 Docker 网络:docker network ls,会显示网络的 ID、名称、驱动类型和作用域。

        

        (2):查看某个网络详情:docker network inspect  网络id / 网络名称

        

        (3):创建docker网络命令:docker  network create 网络名称。如:docker network create test_network,使用 docker network ls 查看 docker 网络:

         

        (4):删除docker网络命令:docker network rm 网络id 或者 网络名称。如:docker network rm test_network 或者 docker network rm 1a2b3c4d

        (5):将容器连接到 docker 网络:docker network connect my_network  my_container,如 docker network connect my_network  nacos,使用 docker network inspect  my_network命令查看连接到 my_network 网络的容器:

        

        (6):将容器从 docker 网络断开连接:docker network disconnect  my_network  my_container,如 docker network disconnect  my_network  nacos,使用 docker network inspect  my_network命令查看连接到 my_network 网络的容器:

        

        (7):删除没有被使用的 Docker 网络:docker network prune

        以上为 Docker 网络基本知识,Docker 网络主要处理容器与容器之间的通信、容器与外部资源的通信,可以定义应用程序的网络边界。不同的 Docker 网络模式有不同的应用场景,在实际开发工作中,根据自己的实际业务场景选择合适的 Docker 网络模式。


http://www.kler.cn/a/537329.html

相关文章:

  • ASP.NET Core中间件Markdown转换器
  • 智能门铃市场:开启智能家居新时代
  • Maven 依赖管理全面解析
  • MySQL三大日志——binlog、redoLog、undoLog详解
  • vite共享配置之---css相关
  • NacosRce到docker逃逸实战
  • 基于 llama-Factory 动手实践 Llama 全参数 SFT 和 LoRA SFT
  • 【C++】C++对C语言的扩充
  • 台湾精锐APEX减速机在半导体制造设备中的应用案例
  • matlab simulink 三级倒立摆LQR控制
  • 【GoLang】切片的面试知识点
  • 【Python深入浅出】Python3中os模块:开启系统交互的万能钥匙
  • 【Spring Boot】网页五子棋项目中遇到的困难及解决方法
  • 进阶数据结构——链式前向星
  • k8s集群外exporter怎么使用Prometheus监控
  • SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具
  • 大语言模型遇上自动驾驶:AsyncDriver如何巧妙解决推理瓶颈?
  • 某咨询大数据解决方案介绍(32页PPT)
  • springboot+redis实现将树形结构存储到redis
  • python的ruff简单使用
  • 模板分享:线段树(2)
  • 动态规划LeetCode-121.买卖股票的最佳时机1
  • 详细介绍docker的network
  • Flask Swagger Demo
  • 使用自定义大模型来部署Wren AI(开源的文本生成SQL方案)
  • c#中lock的经典示例