专业编程基础技术教程

网站首页 > 基础教程 正文

Docker 网络详解:四大模式全解析

ccvgpt 2025-05-15 16:48:14 基础教程 20 ℃

开篇导读

你能用 Docker 启动容器,也能写 Dockerfile 构建镜像了。但你是否遇到过这样的问题:

  • 两个容器无法通信?
  • 容器端口映射怎么设置才最安全?
  • 想打通跨主机通信,却不知道怎么做?

本讲将带你全面掌握 Docker 网络模型,理解容器通信背后的逻辑,搞清楚 bridge、host、overlay、macvlan 四种核心网络模式的原理与使用场景,为后续使用 Kubernetes 的 CNI 网络打好基础。

Docker 网络详解:四大模式全解析


一、Docker 网络架构概览

Docker 使用 Linux 内核中的网络命名空间(network namespace)与虚拟网卡(veth pair)来实现容器之间和外部的通信。

每当你创建容器,Docker 会:

  1. 为容器创建一个独立的网络命名空间;
  2. 配置一对虚拟网卡(veth)连接容器与主机网络;
  3. 根据所选网络模式接入不同的网络结构。

二、四种 Docker 网络模式详解

1 Bridge 模式(默认)

这是 Docker 默认的网络模式。每个容器连接到一个 Linux 网桥 docker0,通过 NAT 转发出主机网络。

特点:

  • 容器通过桥接网卡通信
  • 容器可通过 IP 或自定义网络名相互访问
  • 支持端口映射(-p 方式)

示例:

docker run -d --name web1 nginx
docker run -d --name web2 nginx
docker network inspect bridge

适用场景:单机部署、局域网内容器通信


2 Host 模式

容器直接复用宿主机的网络命名空间,没有隔离。

特点:

  • 容器和宿主机共享网络栈(IP、端口一致)
  • 性能更高
  • 没有 NAT,网络透明

示例:

docker run --network host nginx

注意事项:

  • 多容器容易端口冲突
  • 不适合多实例部署

适用场景:高性能要求、只部署一个容器场景(如物联网边缘设备)


3 Overlay 网络(跨主机通信)

依赖于 Docker Swarm 或 Kubernetes,基于 VXLAN 实现多个主机间的容器互联。

特点:

  • 支持跨主机容器互联
  • 通常用于 Swarm 或 K8s 的集群通信
  • 使用加密封装通信

示例(Docker Swarm 环境):

docker network create -d overlay my-overlay

适用场景:多主机部署、分布式集群

Kubernetes 使用 CNI(如 Flannel、Calico)也基于 overlay 模式。


4 Macvlan 模式

让容器直接拥有物理网卡的 IP,仿佛是网络中的一个独立设备。

特点:

  • 每个容器有独立 MAC 和 IP
  • 无需端口映射,直接参与物理网络通信
  • 容器像“真主机”一样存在

示例:

docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 my-macvlan

注意:

  • 主机和容器不能直接通信(需桥接绕开限制)
  • 需网络管理员协助开放 IP 地址段

适用场景:需要在二层网络中暴露容器,如老旧应用或网络隔离场景


三、模式对比一览表

模式

网络隔离

性能

支持跨主机

端口映射

应用场景

Bridge

支持

默认使用、本地部署

Host

不支持

高性能场景

Overlay

支持

分布式部署

Macvlan

需配置

不需要

二层网络通信


四、容器网络实战小技巧

创建自定义 bridge 网络

docker network create my-bridge
docker run --network my-bridge --name app1 busybox sleep 3600
docker run --network my-bridge --name app2 busybox sleep 3600
docker exec app1 ping app2

使用自定义 bridge 网络,容器可通过服务名互相访问,适合搭建 Redis、MySQL、Nginx 等基础服务。


查看容器网络状态

docker network ls
docker inspect <container-id>

查看容器 IP

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container-name>

本讲总结

  • Docker 网络模式分为 bridge、host、overlay、macvlan 四种;
  • 选择合适的模式非常重要,影响性能、安全性与部署方式;
  • 自定义网络 + 容器服务名 = 本地服务编排最佳实践;
  • Overlay 网络是 Kubernetes 的核心通信方案基础。

Tags:

最近发表
标签列表