Docker容器网络详解+端口映射原理(系列第二篇:实战核心)
文章目录前言一、Docker网络核心认知必须先懂1 容器的隔离本质2 Docker默认自带三大网络二、四大网络模式超通俗详解含适用场景1、bridge 桥接模式默认模式、最常用2、host 主机模式无端口映射、性能最高3、none 无网络模式彻底隔离4、自定义 bridge 网络企业推荐三、端口映射原理彻底读懂 -p1 为什么必须端口映射2 端口映射底层流程3 端口映射三种写法生产常用四、容器互通实战面试高频1 同默认bridge网桥自动互通2 自定义网桥容器名直接互通企业最优解五、四种网络模式企业选型总结直接背六、新手常见网络坑必看避坑1 坑1容器能ping通外网外网访问不了容器2 坑2重启容器后容器IP变了服务连不上3 坑3host模式启动容器提示端口被占用前言上一篇我们完成了Docker安装、镜像操作、容器运行、数据卷挂载全套基础实操已经可以正常拉取镜像、启动容器、持久化数据。但很多同学学完基础后依然搞不懂几个核心问题为什么容器启动后外网需要-p 端口映射才能访问容器IP到底是什么宿主机能不能直接连容器两个不同的Docker容器怎么互相通信Docker四种网络模式到底有什么区别企业到底用哪种这些问题全部依赖Docker网络知识点解决。网络是Docker的灵魂也是后续学习K8s网络、微服务通信的基础。本篇作为Docker系列第二篇带你从零吃透Docker网络底层原理生产实战彻底告别网络访问盲区。一、Docker网络核心认知必须先懂1 容器的隔离本质Docker容器默认是网络隔离的容器拥有独立的网卡、独立IP、独立网络协议栈容器默认无法被外网直接访问容器与宿主机、容器与容器之间默认不完全互通我们做的所有端口映射、网络模式选择本质都是在打破隔离、按需打通网络链路。2 Docker默认自带三大网络Docker安装完成后会自动内置3种基础网络执行以下命令即可查看dockernetworkls默认包含三类核心网络bridge桥接模式容器默认网络模式绝大多数容器默认挂载该网络host主机模式容器直接复用宿主机完整网络无隔离none无网络模式完全禁用网络容器彻底隔离所有Docker容器的网络通信能力均基于这三种基础网络拓展实现。二、四大网络模式超通俗详解含适用场景1、bridge 桥接模式默认模式、最常用核心特点Docker 会自动创建虚拟网桥docker0所有未指定网络的容器都会默认挂载到该网桥下。通俗理解宿主机是一台主设备docker0相当于一台虚拟交换机所有容器都是交换机下的独立设备具备以下特性同一网桥下的容器默认可以互相访问容器可以正常访问外网资源外网无法直接访问容器必须配置端口映射网络结构外网 → 宿主机 → docker0网桥 → 各个容器适用场景90%的普通业务容器部署需要多容器互通同时保留网络隔离性的场景需要通过端口映射对外提供服务的业务优缺点总结✅ 隔离性好、安全性高、容器端口互不冲突✅ 支持同网桥下多容器自由通信❌ 必须配置端口映射外网才能访问容器服务2、host 主机模式无端口映射、性能最高核心特点容器直接复用宿主机的网卡、IP、端口与网络协议栈完全放弃网络隔离。通俗理解不再为容器分配独立虚拟IP容器等同于直接运行在宿主机上的普通进程。核心区别无需配置-p 端口映射容器IP与宿主机IP完全一致容器直接占用宿主机端口存在端口冲突风险适用场景高并发、高性能业务场景网关、监控、日志采集组件需要直接暴露服务不想配置端口映射的场景K8s集群核心组件默认使用该网络模式优缺点总结✅ 无网络转发损耗性能最优✅ 外网可直接访问容器无需端口映射❌ 无网络隔离安全性低端口冲突风险高❌ 单台宿主机无法同时启动同端口的多个容器3、none 无网络模式彻底隔离核心特点强制关闭容器所有网络功能容器无网卡、无独立IP无法联网、无法被任何设备访问。适用场景纯本地计算任务无需联网交互的程序高安全隔离场景禁止容器对外联网、防止数据泄露日常业务开发几乎不会使用仅特殊安全场景适配。4、自定义 bridge 网络企业推荐除了Docker默认的docker0网桥支持手动创建自定义网桥这是企业项目开发的最佳实践整体体验和稳定性远超默认bridge网络。核心优势支持容器名直接互访无需查询容器IP适配动态IP场景独立网段与默认网络完全隔离安全性更高支持网络分组实现不同项目容器隔离通信后续微服务多容器部署、Docker Compose编排全部基于自定义网桥实现。三、端口映射原理彻底读懂 -p1 为什么必须端口映射在默认bridge桥接模式下存在天然网络隔离限制容器IP为内网虚拟IP常见网段172.17.0.x该内网IP无法被外网路由外部设备无法直接寻址宿主机以外的所有设备默认无法找到并访问容器因此必须通过端口映射绑定「宿主机端口与容器端口」打通外网访问链路。2 端口映射底层流程以常用配置-p 8080:8080为例完整访问流程如下用户通过外网访问宿主机IP:8080宿主机iptables规则拦截请求触发NAT转发请求转发至docker0虚拟网桥网桥精准转发至对应容器的8080端口容器处理请求后按原路返回响应数据核心本质外网端口转发 NAT地址转换技术。3 端口映射三种写法生产常用# 1、指定宿主机端口:容器端口生产标配、最常用-p8080:8080# 2、仅指定容器端口宿主机随机分配端口仅测试使用-p8080# 3、绑定指定网卡IP限制访问来源生产高级安全用法-p192.168.1.100:8080:8080四、容器互通实战面试高频1 同默认bridge网桥自动互通所有未手动指定网络的容器都会默认加入docker0默认网桥容器之间可通过内网IP直接访问。核心缺点容器重启后IP会动态变化无法固定只能手动查询IP通信使用极不方便。2 自定义网桥容器名直接互通企业最优解自定义网桥完美解决默认网桥IP动态变动的问题支持通过固定容器名通信是企业项目标准方案。完整实操命令# 1、创建自定义网桥dockernetwork create my-net# 2、启动容器并加入自定义网络dockerrun-d--namenginx--networkmy-net nginxdockerrun-d--namemysql--networkmy-net-eMYSQL_ROOT_PASSWORD123456mysql# 3、容器之间直接通过容器名互访无需查询IPpingnginxpingmysql核心优势容器重启后IP即便变更容器名固定不变服务通信始终稳定适配长期运行的业务项目。五、四种网络模式企业选型总结直接背网络模式隔离性性能是否需要端口映射生产适用场景bridge默认网桥高一般需要普通业务容器、日常开发测试自定义bridge最高一般需要微服务多容器、项目分组隔离、Compose编排host主机模式无隔离最高不需要高并发组件、监控、网关、K8s节点组件none无网络完全隔离无不需要纯离线计算、安全隔离场景六、新手常见网络坑必看避坑1 坑1容器能ping通外网外网访问不了容器原因默认bridge网络模式下容器属于内网隔离环境外网无法直接路由访问内网容器IP。解决方案启动容器时必须添加-p 端口映射打通外网访问链路。2 坑2重启容器后容器IP变了服务连不上原因Docker默认网桥采用动态IP分配机制容器重启后IP会随机变更。解决方案使用自定义网桥通过容器名代替IP通信彻底规避IP变动问题。3 坑3host模式启动容器提示端口被占用原因host模式直接复用宿主机端口会与宿主机本地进程、其他host模式容器的端口冲突。解决方案非高并发高性能场景优先使用bridge端口映射模式。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2600759.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!