主题
聊聊Docker的前世今生
盘诚微信公众号同步发布:https://mp.weixin.qq.com/s/CwJ0TJ6pFujrbwJKyJAmZA
亲爱的小伙伴,我是盘诚。今天想和你再聊聊Docker,不是用冷冰冰的技术术语,而是像老朋友一样,说说它这些年的故事。
Docker的故事要从2013年说起。那一年,一个叫dotCloud的小公司搞出了一个开源项目,本意是想解决自家PaaS平台的部署问题。结果没想到,这个叫Docker的东西一发布就炸了,直接把整个软件交付的玩法给改了。短短几年,它就成了云原生时代的事实标准,连微软、谷歌、亚马逊这些巨头都抢着给它站台。
Docker和虚拟机的最大区别,可以形象地理解为“带房子搬家”和“拧包入住”。虚拟机是把你整个房子都搬走,包括地基、墙壁、水电,所以它重,启动慢,占资源。而Docker只带你的行李和必需品,它跟房东共用厨房和卫生间——也就是共享宿主机的内核。所以Docker启动只要毫秒级,资源占用也少得多。但代价是,你没法在Windows上跑Linux内核的容器,也没法做到虚拟机那样的硬隔离。简单来说,虚拟机模拟出一整台电脑,连操作系统都得装一遍;Docker则是操作系统级别的虚拟化,大家挤在同一栋大楼的胶囊公寓里,轻盈且高效。
Docker与Kubernetes(K8s)的关系,好比发动机和整车。 Docker解决了“怎么跑”的问题,K8s解决的是“怎么管一堆机器跑一堆容器”的问题。当年Google看到Docker火了,就把自己用了十年的Borg系统开源成了K8s。一开始Docker还挺高兴,觉得自己找到了亲爹。结果后来K8s越做越大,干脆在2018年宣布不再直接支持Docker的运行时,改用containerd。这一刀下去,等于告诉全世界:我K8s要自立门户了,你Docker只是个工具而已。 单打独斗用Docker,大规模集群作战就得靠K8s指挥,两者从亲密战友变成了分工明确的上下游。
至于Podman,你可以把它看作是Docker的一个“无守护进程”替代品。 它是Red Hat搞出来的,口号是“更安全、兼容Docker命令”——你平时用的docker run,换成podman run几乎不用改脚本。Red Hat为啥要搞这个?因为Docker在2019年被Mirantis收购后,社区担心它会被商业化绑架。Podman的出现,给了那些不想被Docker绑死的人一个备胎。目前来看,Podman在红帽系系统上表现不错,但生态和易用性还是比不上Docker。它就像干儿子,虽然能干,但亲儿子的江湖地位一时半会儿还撼动不了。
大企业抛弃Docker,不是因为它不好,而是因为它不够赚钱。 Docker公司从一开始就没找到稳定的商业模式:开源免费,企业版又卖不动,加上K8s的崛起让Docker变成了基础设施而非核心平台。2019年被收购后,Docker开始疯狂割韭菜:限制免费账户的镜像拉取次数、推出付费订阅、甚至一度传出要收费才能继续用Docker Desktop。与此同时,containerd和CRI-O这些轻量级运行时的出现,让大厂们发现,没有Docker这个中间层,直接用底层运行时反而更可控。于是K8s社区带头“去Docker化”,OpenShift也全面转向Podman,Docker就这么被边缘化了。其实他们抛弃的不是Docker这个工具,而是它早期那个臃肿的桌面版客户端和商业策略。核心的开源引擎依然是基石,只是大家更倾向于用标准接口来调用它,而不是绑定在Docker Inc.的生态里。
到了2026年,Docker其实活得好好的,只是换了个活法。 它不再是云原生的唯一选择,但依然是个人开发者和小团队的首选。Docker Desktop推出了免费的个人版,企业版功能也更完善了。更重要的是,Docker Inc.终于想明白了,自己不跟K8s争天下,老老实实做好“开发环境标准化”这件事就行。现在的Docker更像是一个好用的工具箱,而不是非要统治世界的野心家。它褪去了当年的青涩,从只能在Linux上折腾的命令行工具,变成了云原生时代的通用语言。从个人开发者的本地环境隔离,到企业级的微服务架构,它让软件的交付变得像快递包裹一样标准化。
说到最后,盘诚越来越觉得,技术这东西没有永恒的神。Docker当年有多风光,现在就有多现实。但它确实改变了我们对软件交付的理解,就像Git改变了代码协作一样。如果你还在纠结要不要学Docker,盘诚的建议是: 学,但要明白它只是工具,不是信仰。 毕竟,真正的高手从来不依赖某个工具,而是知道什么时候用什么工具。
