网站首页 > 基础教程 正文
开篇导读
你能用 Docker 启动容器,也能写 Dockerfile 构建镜像了。但你是否遇到过这样的问题:
- 两个容器无法通信?
- 容器端口映射怎么设置才最安全?
- 想打通跨主机通信,却不知道怎么做?
本讲将带你全面掌握 Docker 网络模型,理解容器通信背后的逻辑,搞清楚 bridge、host、overlay、macvlan 四种核心网络模式的原理与使用场景,为后续使用 Kubernetes 的 CNI 网络打好基础。
一、Docker 网络架构概览
Docker 使用 Linux 内核中的网络命名空间(network namespace)与虚拟网卡(veth pair)来实现容器之间和外部的通信。
每当你创建容器,Docker 会:
- 为容器创建一个独立的网络命名空间;
- 配置一对虚拟网卡(veth)连接容器与主机网络;
- 根据所选网络模式接入不同的网络结构。
二、四种 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 的核心通信方案基础。
猜你喜欢
- 2025-05-15 Filebeat es 同步服务器日志到es
- 2025-05-15 docker容器的使用以及部署mysql
- 2025-05-15 一、docker部署ollama同时分别运行gemma3:27b bge-m3 deepseek-r1
- 2025-05-15 聊聊部署在docker容器里面的springboot项目如何启用arthas
- 2025-05-15 Docker容器化部署Java应用的最佳实践
- 2025-05-15 「linux」如何使用docker部署c/c++程序
- 2025-05-15 Docker安装MySQL 8、Redis并确保数据持久化的详细步骤
- 2025-05-15 Flask Docker Demo 项目指南
- 2025-05-15 彻底搞懂容器启动、停止、调试的每一个细节!
- 2025-05-15 Mac安装Docker及使用
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- deletesql (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)