基于本文回答

播面 播面

文解图解播客视频,多维讲透八股文
0
评论

Docker 默认支持的网络驱动(Network Drivers)有哪些?

在 Docker 中,网络驱动(Network Drivers)用于实现容器之间以及容器与外部世界之间的通信。Docker 默认提供了多种内置的网络驱动,以满足不同的应用场景。

以下是 Docker 默认支持的 5 种核心网络驱动


1. Bridge(桥接网络)- 默认驱动

  • 介绍:这是 Docker 默认的网络驱动。如果不指定网络类型,新创建的容器会自动连接到一个名为 bridge 的默认桥接网络上。
  • 工作原理:Docker 会在宿主机上创建一个虚拟网桥(通常是 docker0)。连接到同一个桥接网络上的容器可以相互通信(通过 IP 地址,如果是自定义桥接网络还可以通过容器名解析),同时它们通过 NAT(网络地址转换)访问外部网络。
  • 适用场景
    • 单台宿主机上运行的多个容器之间需要相互通信。
    • 最常用的开发和测试环境。

2. Host(主机网络)

  • 介绍:该驱动移除了容器和 Docker 宿主机之间的网络隔离。
  • 工作原理:容器不会获得自己的 IP 地址,而是直接使用宿主机的 IP 和端口。例如,如果你在容器中运行一个占用 80 端口的 Nginx,那么该服务会直接占用宿主机的 80 端口。
  • 适用场景
    • 追求极致性能:因为没有网络地址转换(NAT)的开销,网络传输效率最高。
    • 需要处理大量端口或特定范围端口的容器。
  • 缺点:容易发生端口冲突;降低了容器的安全隔离性。

3. Overlay(覆盖网络)

  • 介绍:用于连接跨多台宿主机的容器。
  • 工作原理:它在多个 Docker 守护进程(Hosts)之间创建一个分布式网络。Docker 会处理路由,使不同物理机上的容器就像连接在同一个本地交换机上一样进行通信。
  • 适用场景
    • Docker Swarm 集群(Overlay 是 Swarm 的基石)。
    • 多主机容器集群通信(虽然现在很多被 Kubernetes 的 CNI 替代,但在 Swarm 中仍是核心)。

4. Macvlan(物理网卡虚拟化)

  • 介绍:允许为容器分配一个真实的、具有唯一 MAC 地址的 IP,使其看起来像网络上的一个物理设备。
  • 工作原理:Docker 容器直接连接到宿主机的物理网卡。容器的 IP 地址与宿主机处于同一个局域网(LAN)网段,可以直接被局域网内的其他物理设备访问,无需通过端口映射。
  • 适用场景
    • 遗留系统迁移:某些老旧应用要求容器必须拥有独立的、局域网内可路由的 IP。
    • 需要监控网络流量或与物理网络设备直接对接的场景。
  • 注意:使用 Macvlan 需要宿主机的物理网卡支持“混杂模式”(Promiscuous Mode)。

5. None(无网络)

  • 介绍:将容器放入一个完全隔离的网络栈中。
  • 工作原理:容器内只有本地回环接口(lo,即 127.0.0.1),没有网卡,无法访问外网,也无法被外部访问。
  • 适用场景
    • 高安全性要求的任务:例如运行一个不需要联网的计算任务、批处理作业或生成密钥的容器。
    • 自定义网络配置:用户想要完全手动配置容器的网络。

总结与对比

驱动名称 通信范围 性能 安全隔离性 典型应用场景
Bridge 单机容器间 中等 单机多容器应用(最常用)
Host 容器与宿主机共享 极高 高并发、低延迟服务
Overlay 跨多台宿主机 中等(有封装开销) 跨主机的集群服务(Swarm)
Macvlan 局域网内所有设备 遗留系统迁移、直连物理网络
None 仅容器内部 N/A 极高 离线计算、高安全任务

如何查看当前 Docker 支持的网络?

你可以在终端运行以下命令,查看当前宿主机上已启用的网络和它们使用的驱动:

bash
docker network ls