最近看docker相关视频,满屏幕对这个问题的弹幕,也没见一个正确说明这个问题的弹幕,固来探讨一下。
我其实也没有相关官方正式资料之类的证据,但我只要把逻辑讨论出一二三,我相信你一定会同意。甚至,我只需要反问一个问题,你可能也会想明白。
请问:你认为docker中自定义网络的存在意义是什么?
...
...
...
答案:网络隔离。
Linux中网络命名空间(network namespace)的概念,可以去了解一下,你可以拿很多高级程序设计语言中的命名空间来联想思考。
正如你所知,容器默认为bridge,那所有容器一启动,就全部互通,这个服务器的网络该多乱,该多不好管。就如docker是为了微服务诞生,那诸多微服务也可以按照模块分隔成很多大小不同的单元,要是全都互通,不头大吗。
所以,虽然我也不知道底层实现具体怎么样,但猜测大概类似于是默认bridge自己有一个命名空间,自定义网络有自己各自的命名空间,去做到不同自定义网络之间的隔离,所有网络命名空间又是基于docker0能连它。至于默认bridge的容器,估计就是为了这个目的,特殊处理了。
不同自定义命名空间之间通过docker network connect实现互通,不同docker服务之间也有相应的东西,官网貌似见到过一眼,目前我还没兴趣。
到此,标题讨论结束。
==============================================
答案,我相信你心里已经有了,但我想在这跑一下题。
你为什么没想到
我很喜欢一句话:《好的角度,能提高你80的智商》
很多时候,我们不是不够聪明,而是没有一个清晰冷静的头脑状态和好的切入角度。所以我们经常追一个BUG,长时间没有头绪,就不能上头,必须要休息一下,因为已经在某个角度,过于深入出不来了。
学习一个概念或者技术,我觉得先提出通用的核心问题,再根据这些问题去学习比较好。
一个概念,它,是什么?为什么诞生?为什么同类竞争中胜出?为什么淘汰?说白了,相当于追逐本质、核心。
学习途中产生一些疑问,暂时想不明白,就试着回归那些本质问题去重新思考。
但很多时候,也不能太较真,因为有很多技术,他不是因为本身的优势,而是因为历史原因,替换成本原因,普及开来或者继续存在。
至于为什么啰嗦了呢,是因为我有一个不成熟的小目标,想给中国软件行业做出一份自己的小贡献。你看我文章有收获,你就是我对中国软件行业的贡献,你可给我长点心吧。
另。
我一个PHP,那么多中间件,天天蹭java的教学视频,生态好差,我不服。
咳咳,我还是想说:PHP是世界上最好的语言。不服来战