文章目录
前言
对于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模式。
优点:
- 容器间通信方便:容器可以通过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网络模式则适用于需要实现容器跨主机通信的场景。