docker联网
Docker 的网络配置是容器化技术的核心功能之一,主要通过 网络驱动(Network Drivers) 实现不同场景下的通信需求
一、Docker 网络的默认模式
1. Bridge 模式(默认):快递仓库的「内部物流网」
- 原理:
- 默认创建一个虚拟网桥
docker0
,容器通过veth pair
连接到该网桥。 - 容器之间通过虚拟局域网(如
172.17.0.0/16
)通信,对外通过 NAT 访问外网。
- 默认创建一个虚拟网桥
- 适用场景:单机环境下多个容器协作(如 Web + 数据库)。
- 操作示例:
# 运行容器(默认使用桥接网络) docker run -d --name web nginx docker run -d --name mysql mysql # 查看容器 IP docker inspect web | grep IPAddress
2. Host 模式:直接使用「仓库大门」
- 原理:
- 容器直接共享宿主机的网络命名空间,使用宿主机 IP 和端口。
- 无隔离性,性能更高(省去 NAT 开销)。
- 适用场景:需要高性能或直接暴露端口的场景(如负载均衡器)。
- 操作示例:
docker run -d --network host nginx # 直接访问宿主机 IP:80
3. None 模式:完全独立的「密室」
- 原理:
- 容器只有本地回环接口
lo
,无网络连接。
- 容器只有本地回环接口
- 适用场景:极端安全需求或自定义网络配置。
- 操作示例:
docker run -d --network none alpine
二、自定义网络:灵活组网
1. 创建自定义桥接网络(推荐)
# 创建网络(默认驱动为 bridge)
docker network create my-net
# 运行容器并加入网络
docker run -d --name web --network my-net nginx
docker run -d --name mysql --network my-net mysql
# 容器间直接通过名称通信(DNS 自动解析)
docker exec web ping mysql
2. 覆盖网络(Overlay):跨主机的「联合仓库」
- 原理:
- 用于 Docker Swarm 集群,允许不同物理机上的容器直接通信。
- 操作示例:
# 创建 Overlay 网络(需 Swarm 模式) docker swarm init docker network create -d overlay swarm-net # 在集群中部署服务 docker service create --network swarm-net --name web nginx
三、关键操作:端口映射与容器互联
1. 端口映射(-p):快递柜的「取件码」
# 将容器 80 端口映射到宿主机 8080
docker run -d -p 8080:80 --name web nginx
# 访问方式:宿主机IP:8080 → 容器IP:80
2. 容器互联(--link)(已过时,建议用自定义网络替代)
# 旧方法(不推荐)
docker run -d --name web --link mysql:db nginx
# 在 web 容器中可通过 `db` 主机名访问 mysql
网络模式对比
模式 | 性能 | 隔离性 | 适用场景 |
---|---|---|---|
Bridge | 中 | 高 | 单机多容器协作(默认选择) |
Host | 高 | 无 | 高性能需求,直接暴露端口 |
None | - | 最高 | 完全隔离或自定义网络 |
Overlay | 中 | 高 | 跨主机集群(Swarm/Kubernetes) |
总结
- 简单场景:用默认桥接网络 + 端口映射(
-p
)。 - 多容器协作:创建自定义桥接网络,通过容器名通信。
- 跨主机集群:使用 Overlay 网络(Swarm/K8s)。
- 高性能需求:Host 模式(牺牲隔离性)。
通过合理选择网络模式,你可以像搭积木一样自由组合容器,构建高效、安全的分布式应用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!