第四部分-Docker网络与存储——18. 自定义网络
18. 自定义网络1. 自定义网络概述自定义网络允许用户根据需求创建具有特定配置的网络相比默认的 bridge 网络提供了更好的隔离性、DNS 解析和灵活性。┌─────────────────────────────────────────────────────────────┐ │ 自定义网络架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ mynet (自定义) │ │ │ │ 10.10.0.0/16 │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │ web-app │ │ api-app │ │ db-app │ │ │ │ │ │10.10.0.2│ │10.10.0.3│ │10.10.0.4│ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ │ │ │ │ │ │ │ │ │ └────────────┼────────────┘ │ │ │ │ │ │ │ │ │ 自动 DNS 解析 │ │ │ │ web-app → api-app → db-app │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘2. 创建自定义网络2.1 基础创建# 创建 bridge 类型网络dockernetwork create mynet# 指定 IP 地址范围dockernetwork create--driverbridge--subnet10.10.0.0/16--gateway10.10.0.1 mynet# 指定 IP 范围dockernetwork create--subnet10.10.0.0/16 --ip-range10.10.1.0/24 mynet# 指定网络驱动dockernetwork create--driverbridge--optcom.docker.network.bridge.namemy_bridge mynet# 查看网络dockernetworklsdockernetwork inspect mynet2.2 网络选项配置# 禁用 IPv6dockernetwork create--ipv6false mynet# 启用 IPv6dockernetwork create--ipv6--subnet2001:db8::/64 mynet# 设置 MTUdockernetwork create--optcom.docker.network.driver.mtu1450mynet# 设置网桥名称dockernetwork create--optcom.docker.network.bridge.namemy_bridge mynet# 启用 iptablesdockernetwork create--optcom.docker.network.bridge.enable_ip_masqueradetrue mynet3. 使用自定义网络3.1 运行容器# 创建网络dockernetwork create app-net# 在自定义网络中运行容器dockerrun-d--nameweb--networkapp-net nginxdockerrun-d--nameapi--networkapp-net myapidockerrun-d--namedb--networkapp-net mysql# 通过容器名通信dockerexecwebpingapidockerexecwebpingdb# 指定 IP 地址dockerrun-d--networkapp-net--ip10.10.0.100 nginx3.2 连接现有容器# 将现有容器连接到网络dockernetwork connect app-net existing-container# 断开连接dockernetwork disconnect app-net existing-container# 指定连接时的 IPdockernetwork connect--ip10.10.0.200 app-net existing-container# 查看容器连接的网络dockerinspect container_name|grep-A10Networks4. 网络隔离4.1 多网络隔离# 创建不同的网络隔离环境dockernetwork create frontenddockernetwork create backenddockernetwork create database# 前端应用只连接前端网络dockerrun-d--nameweb--networkfrontend nginx# API 同时连接前端和后端dockerrun-d--nameapi--networkfrontend--networkbackend myapi# 数据库只连接后端dockerrun-d--namedb--networkbackend mysql# 通信路径# web → api (通过 frontend)# api → db (通过 backend)# web 无法直接访问 db4.2 网络访问控制# 创建隔离网络dockernetwork create--internalinternal-net# 内部网络无外网访问权限dockerrun-d--nameinternal-app--networkinternal-net myapp# 无法访问外网dockerexecinternal-apppinggoogle.com# 失败# 通过代理容器访问外网dockerrun-d--nameproxy--networkinternal-net--networkbridge myproxy5. 高级配置5.1 自定义网关# 创建网络指定网关dockernetwork create\--subnet172.20.0.0/16\--gateway172.20.0.1\mynet# 创建辅助网络dockernetwork create\--subnet172.21.0.0/16\--gateway172.21.0.1\mynet25.2 网络别名# 创建网络dockernetwork create mynet# 运行容器并添加别名dockerrun-d--namedb--networkmynet --network-alias mysql --network-alias database mysql# 其他容器可以通过别名访问dockerrun--rm--networkmynet alpinepingmysqldockerrun--rm--networkmynet alpinepingdatabase# 添加额外的别名到运行中的容器dockernetwork connect--aliasprimary-db mynet db6. 网络驱动6.1 Bridge 驱动# 默认驱动单机使用dockernetwork create--driverbridge mynet# 带选项的 bridgedockernetwork create\--driverbridge\--optcom.docker.network.bridge.namemy_bridge\--optcom.docker.network.bridge.enable_icctrue\--optcom.docker.network.bridge.enable_ip_masqueradetrue\--optcom.docker.network.bridge.host_binding_ipv40.0.0.0\mynet6.2 Overlay 驱动Swarm# 跨主机网络需要 Swarm 模式dockernetwork create--driveroverlay--attachablemy-overlaydockerservicecreate--networkmy-overlay--nameweb nginx6.3 Macvlan 驱动# 直接使用物理网络dockernetwork create-dmacvlan\--subnet192.168.1.0/24\--gateway192.168.1.1\-oparenteth0\macnet7. 网络管理7.1 查看网络# 列出所有网络dockernetworkls# 查看网络详情dockernetwork inspect mynet# 查看网络连接的容器dockernetwork inspect mynet--format{{range .Containers}}{{.Name}} {{.IPv4Address}}{{\n}}{{end}}# 查看网络的使用情况dockernetworkls--formattable {{.Name}}\t{{.Driver}}\t{{.Scope}}7.2 清理网络# 删除网络dockernetworkrmmynet# 清理未使用的网络dockernetwork prune# 强制清理dockernetwork prune-f# 清理特定标签的网络dockernetwork prune--filteruntil24h8. DNS 配置8.1 自定义 DNS# 创建网络时指定 DNSdockernetwork create\--dns8.8.8.8\--dns8.8.4.4\--dns-search example.com\mynet# 在容器中指定 DNSdockerrun-d--dns8.8.8.8 --dns-search example.com nginx8.2 容器名解析# 自定义网络支持自动 DNS 解析# 容器名指向容器 IP# 网络别名也支持解析# 测试解析dockerrun--rm--networkmynet alpinenslookupwebdockerrun--rm--networkmynet alpinedigapi9. 网络调试9.1 网络诊断工具# 创建带网络工具的容器dockerrun-it--networkmynet--namenet-tools alpinesh# 安装网络工具apkaddiproute2curlbusybox-extras# 测试连接ipaddriproutepingwebcurlapi:8080traceroutedb9.2 网络故障排查# 检查网络配置dockernetwork inspect mynet# 检查容器连接dockerinspect container_name|grep-A10Networks# 测试网络连通性dockerexeccontainer_nameping-c3target-containerdockerexeccontainer_namecurl-vhttp://target-container:port# 查看 iptables 规则sudoiptables-L-n-vsudoiptables-tnat-LDOCKER-n-v10. 实战示例10.1 三层应用架构# 创建三个网络dockernetwork create frontenddockernetwork create backenddockernetwork create database# 前端层只能访问前端网络dockerrun-d--nameweb\--networkfrontend\nginx# 应用层连接前后端dockerrun-d--nameapi\--networkfrontend\--networkbackend\myapi# 数据层只能被后端访问dockerrun-d--namedb\--networkbackend\-eMYSQL_ROOT_PASSWORD123\mysql# 验证通信dockerexecwebpingapi# 成功dockerexecwebpingdb# 失败隔离dockerexecapipingdb# 成功10.2 网络模板# 创建网络模板脚本dockernetwork create\--driverbridge\--subnet10.10.${ENV}.0/24\--gateway10.10.${ENV}.1\--labelenvironment${ENV}\--labelproject${PROJECT}\${PROJECT}-${ENV}11. 命令速查操作命令创建网络docker network create列出网络docker network ls查看详情docker network inspect连接容器docker network connect断开容器docker network disconnect删除网络docker network rm清理网络docker network prune12. 最佳实践✅ 推荐做法使用自定义网络而非默认 bridge合理规划 IP 地址段避免冲突使用网络隔离提高安全性为网络添加标签便于管理定期清理未使用网络生产环境指定 IP 范围❌ 避免事项在生产环境使用默认 bridge网络段与宿主机网络冲突创建过多未使用网络忽略网络 MTU 设置在 bridge 网络上依赖 --link13. 常见问题Q1: 如何删除正在使用的网络先断开所有连接的容器或强制删除需停止相关容器。Q2: 自定义网络和默认 bridge 的区别自定义网络支持容器名自动 DNS 解析默认 bridge 不支持。Q3: 容器启动后能更改网络吗可以使用docker network connect/disconnect。14. 小结自定义网络提供更好的隔离性和灵活性支持自定义 IP 范围、网关、DNS自动 DNS 解析容器名可以实现网络隔离类 VLAN支持容器动态连接/断开网络一个容器可连接到多个网络定期清理未使用网络
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2602071.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!