Docker不同的网络模式特点

文章目录


前言

对于docker的不同网络模式,可以深入的理解每种模式的用途和背后的机制,Docker网络是docker容器之间进行通信的桥梁,也是容器与外部网络之间交互的通道。从docker创建之初,就有自己的网络驱动container network manager ,简称CNM,支持多种模式。


一、Docker默认网络

Docker提供三种默认的网络驱动:bridge、host和none。

安装docker后,使用docker network ls查看当前网络模式。

示例:

二、docker不同network 区别

Docker的网络模式是其网络通信的基础,不同的网络模式适用于不同的场景和需求 

2.1.桥接模式(bride)

原理:Docker在宿主机上创建一个虚拟网桥(默认为docker0),容器启动时会被分配一个虚拟网卡(如eth0),该网卡连接到docker0网桥上。容器通过docker0网桥与宿主机或其他容器通信。容器要访问外部网络时,Docker会进行NAT转换,将容器内的IP地址和端口映射到宿主机的IP地址和端口上

特点:网络隔离性好,涉及到NAT转换,性能可能略低于host模式。

优点:

  1.         容器间通信方便:容器可以通过IP地址或容器名称进行通信。

        端口映射灵活:可以将容器端口映射到宿主机端口,方便外部访问容器服务。

缺点:

        网络性能略低于Host模式,因为涉及到NAT转换

 代码如下(示例):创建桥接模式的网络

docker run -d --name my_bridge_container --network bridge nginx:latest

2.2.Host模式

原理容器和宿主机共用一个“network namespace”,容器不会获得自己的网络,而是直接使用宿主机的网络。容器内部的应用直接监听宿主机的网络端口,使用宿主机的IP地址进行通信

特点:网络性能最好,因为省去了NAT转换和额外的网络栈开销,但网络隔离性差,容易引发端口冲突和安全问题。

优点:

        网络性能好:容器与宿主机共享网络,无需经过额外的网络层,可以减少网络延迟和丢包。

        简单易用:无需对容器进行复杂的网络配置。

缺点:

        端口冲突:宿主机上已经使用的端口在Host模式下无法被容器再次使用。

        安全性较低:容器与宿主机共享网络,容器之间的网络隔离性降低,容器中的应用程序可以直接访问宿主机上的网络接口。

代码如下(示例):

docker run -d --name my_host_container --network host nginx:latest

2.3.None(无网络模式)

原理:容器不配置任何网络参数,即没有IP地址、网关等,完全处于隔离状态。

特点:新创建的容器会与指定的容器共享IP和端口范围。

优点:

        容器间通信方便:共享网络的容器可以直接通过IP或端口进行通信。

缺点:

        端口管理复杂:需要确保共享端口的容器之间不会发生冲突。

        安全性问题:类似于Host模式,容器之间的网络隔离性降低。

代码如下(示例):

docker run -d --name my_none_container --network none nginx:latest

2.4Container(容器模式)

原理:新创建的容器会共享另一个已运行容器的网络命名空间,包括IP地址、端口等。

特点:新创建的容器会与指定的容器共享IP和端口范围。

优点:

        容器间通信方便:共享网络的容器可以直接通过IP或端口进行通信。

缺点:

        端口管理复杂:需要确保共享端口的容器之间不会发生冲突。

        安全性问题:类似于Host模式,容器之间的网络隔离性降低。

2.5Overlay模式(适用于Docker Swarm或Kubernetes)

原理:Overlay网络是Docker为了支持多宿主机间的容器通信而设计的。它通过虚拟网络覆盖在物理网络之上,使用隧道协议(如VXLAN)封装数据包,使不同宿主机上的容器能够相互通信。

特点:Docker会为每个容器分配一个独立的IP地址,并将容器连接到一个名为docker0的虚拟网桥上。容器之间以及容器与宿主机之间可以通过docker0网桥进行通信。

优点:

        容器间通信方便:容器可以通过IP地址或容器名称进行通信。

        端口映射灵活:可以将容器端口映射到宿主机端口,方便外部访问容器服务。

缺点:

        网络性能略低于Host模式:因为需要经过额外的网络层。

代码如下(示例):

docker service create --name my_overlay_service --network overlay nginx:latest

三.自定义网络模块

命令ip route查看当前网络子网、网光创建后使用docker network ls查看。

代码如下(示例):

docker network create -d macvlan  --subnet=子网ip/21  --gateway=网关  -o parent=网卡名称   my_macvlan_network

总结

Docker的网络模式各有特点,选择哪种模式取决于具体的应用场景和需求。Host模式适用于需要最大化网络性能或访问宿主机网络接口的场景;Container模式适用于容器间紧密通信且对网络隔离性要求不高的场景;None模式适用于高安全性、单机环境、不需要联网的容器;Bridge模式是Docker的默认网络模式,适用于大多数需要容器间通信以及外部访问容器服务的场景;Overlay网络模式则适用于需要实现容器跨主机通信的场景。

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值