跳到主要内容

Docker网络模式

Docker 提供了多种网络模式,用于控制容器如何与主机、其他容器以及外部网络进行通信。每种网络模式都有不同的用途和特点。

网络模式特点适用场景
Bridge默认模式,容器通过虚拟桥接网络通信单主机上多个容器隔离通信
Host容器共享主机网络栈,性能高,无隔离高性能需求场景
None容器无网络接口,完全隔离不需要网络的场景
Container共享另一个容器的网络栈紧密耦合的容器组
Overlay支持跨主机容器通信分布式应用或多主机通信
Macvlan容器直接连接到物理网络,拥有独立 MAC 地址容器需要直接暴露在物理网络中
自定义网络支持自定义配置,DNS 自动发现需要精细控制网络配置的场景

1. Bridge 网络模式(默认模式)

  • 描述: 这是 Docker 的默认网络模式。每个容器会连接到一个虚拟的 Docker 桥接网络(docker0),并通过这个桥接网络与其他容器或外部网络通信。
  • 特点:
    • 容器之间可以通过 IP 地址相互通信。
    • 容器可以通过端口映射(-p 参数)与主机或外部网络通信。
    • 每个容器会分配一个独立的 IP 地址。
  • 适用场景: 适用于单主机上多个容器需要隔离通信的场景。
  • 示例:
    docker run -d --name my_container nginx
    默认情况下,容器会使用 bridge 网络模式。

2. Host 网络模式

  • 描述: 容器直接使用主机的网络栈,与主机共享 IP 地址和端口。
  • 特点:
    • 容器不会分配独立的 IP 地址,而是直接使用主机的网络接口。
    • 容器可以直接访问主机的端口,无需端口映射。
    • 性能较好,因为不需要额外的网络隔离。
  • 适用场景: 适用于对网络性能要求较高的场景,但牺牲了网络隔离性。
  • 示例:
    docker run -d --name my_container --network host nginx
    此时,容器中的服务会直接绑定到主机的端口。

3. None 网络模式

  • 描述: 容器没有网络接口,完全隔离于网络。
  • 特点:
    • 容器无法与外部网络或其他容器通信。
    • 适用于完全不需要网络的场景。
  • 适用场景: 适用于只需要本地文件系统操作或完全隔离的场景。
  • 示例:
    docker run -d --name my_container --network none nginx

4. Container 网络模式

  • 描述: 容器共享另一个容器的网络命名空间,即两个容器使用相同的网络栈。
  • 特点:
    • 两个容器共享 IP 地址和端口。
    • 适用于需要紧密耦合的容器(例如日志收集容器与应用容器)。
  • 适用场景: 适用于需要共享网络的容器组。
  • 示例:
    docker run -d --name container1 nginx
    docker run -d --name container2 --network container:container1 nginx
    container2 会共享 container1 的网络栈。

5. Overlay 网络模式

  • 描述: 用于跨多个 Docker 主机的容器通信,通常与 Docker Swarm 或 Kubernetes 等集群管理工具一起使用。
  • 特点:
    • 支持跨主机的容器通信。
    • 使用 VXLAN 技术实现网络虚拟化。
  • 适用场景: 适用于分布式应用或多主机容器通信的场景。
  • 示例:
    docker network create -d overlay my_overlay_network
    docker service create --network my_overlay_network --name my_service nginx

6. Macvlan 网络模式

  • 描述: 为容器分配一个 MAC 地址,使其直接连接到物理网络,看起来像一个物理设备。
  • 特点:
    • 容器可以直接通过物理网络与其他设备通信。
    • 需要支持 MACVLAN 的物理网络设备。
  • 适用场景: 适用于需要容器直接暴露在物理网络中的场景。
  • 示例:
    docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 my_macvlan_network
    docker run -d --name my_container --network my_macvlan_network nginx

7. 自定义网络

  • 描述: Docker 允许用户创建自定义的网络,容器可以连接到这些网络以实现更灵活的网络配置。

  • 特点:

    • 支持自定义子网、网关和 IP 地址范围。
    • 支持 DNS 自动发现,容器可以通过名称相互访问。
  • 适用场景: 适用于需要精细控制网络配置的场景。

  • 示例:

    docker network create my_custom_network
    docker run -d --name my_container --network my_custom_network nginx