创建自定义网络是什么
创建一个由用户命名的容器网络,并可以指定网段、网关,或把它设为仅内部互通。与默认网络最大的差别是自带名称解析:同一自定义网络里的容器可以用容器名或别名互相访问,不再依赖手工维护地址,这大幅简化了多容器应用的连接方式。
基本信息
| 语法 | docker network create [选项] 名称 |
|---|---|
| 默认驱动 | 本机桥接网络 |
| 常用选项 | --subnet 指定网段 --gateway 指定网关 --internal 禁止外部访问 --attachable 允许手工接入 |
| 其他驱动 | 跨主机覆盖网络、物理网络接入等,按场景选择 |
| 命名要求 | 同一引擎内网络名唯一,重名时需要先删除或改用标识 |
典型使用场景
- 多服务应用组网:把应用与依赖放进同一网络,直接用服务名互访
- 环境隔离:不同项目用不同网络,避免误连到别的项目服务
- 仅内部互通:数据库网络设为内部,只允许应用访问,不对外暴露
- 固定网段:与既有网络规划对齐,避免与办公网、专线地址冲突
- 跨主机通信:集群环境下用覆盖网络让不同主机上的容器互通
常用示例
常用示例
docker network create app-net # 默认桥接网络
docker network create --subnet 172.20.0.0/24 --gateway 172.20.0.1 app-net # 指定网段
docker network create --internal db-net # 仅内部访问
docker run -d --network app-net --name api app/api:v1.2 # 容器接入网络
docker network inspect app-net # 查看网络里的容器与网段预置网络与自定义网络
| 对比项 | 预置桥接网络 | 自定义网络 |
|---|---|---|
| 名称解析 | 不支持按容器名解析 | 支持按容器名与别名解析 |
| 隔离性 | 所有容器共享,容易互相看到 | 按需划分,隔离更清晰 |
| 网段 | 由引擎默认分配 | 可指定,便于与网络规划对齐 |
| 接入方式 | 默认接入,改动少 | 启动时显式指定,意图明确 |
| 适用场景 | 临时试验 | 常规多容器应用 |
规划网络时的注意点
- 网段要与办公网、专线、其他环境错开,冲突会造成路由异常难以定位
- 同一网段只能被一个网络占用,创建报冲突时先查看既有网络
- 仅内部网络里的容器访问外网需要额外配置,别指望它自带出口
- 网络命名与项目对应,删除容器组时一并清理网络,避免残留
- 生产环境的网络变更要评估在跑的服务,删除网络会断开容器通信
自定义网络自带的名称解析是靠服务名工作的:应用配置里写服务名而不是地址,服务重建后地址变化也不影响连接。
把数据库网络设为仅内部访问,再让应用同时接入内部网络与对外网络,是常见的分层做法,能在不暴露数据库的前提下让应用对外服务。