2020年,Kubernetes 1.20宣布弃用Docker作为容器运行时,整个云原生社区炸了锅。当时无数人喊着"Docker要完了",结果六年过去了,Docker依然活得挺好。但2026年的今天,局面真的不一样了------不是Docker突然暴毙,而是它被从根上架空了。
这不是一篇"Docker已死"的标题党水文。我想聊的是一个更值得深思的问题:当容器的运行时、构建工具和镜像标准全部脱离Docker独立存在时,Docker到底是什么?
Docker的"死亡"不是一场猝死,而是缓慢解体
先理清一个事实:Kubernetes从v1.24开始移除dockershim,不再原生支持Docker Engine。截至2026年,现代K8s集群的标准配置是containerd或CRI-O。这不是新闻,而是已经运行了四年的生产环境常态。
但很多人混淆了一个概念:K8s弃用的不是Docker镜像,而是Docker Engine这个运行时。你的Dockerfile构建的镜像依然能在K8s上跑------因为OCI标准统一了一切。Docker最大的"遗产"不是Docker Engine,而是Dockerfile和OCI镜像格式。
这才是Docker真正的悖论:它定义了容器的标准,而这个标准最终让Docker自身变得可替代。
Containerd 2.0:沉默的赢家
如果说这场容器战争有一个隐形冠军,那就是containerd。
Containerd 2.0在2024年底正式发布,距离1.0版本整整七年。这不是一个追求花哨功能的版本------它做的是战略性的稳定化和接口收敛。v2重构了镜像快照系统,原生支持了NRI(Node Resource Interface),并且把Sandbox API正式稳定化。
为什么说它是沉默的赢家?看数据:2026年,超过78%的K8s生产集群使用containerd作为默认运行时。它不追求开发者体验,不做桌面端,不搞商业化------它只做一件事:稳定地跑容器。
但这恰恰是它的局限。Containerd是给运维和平台工程师用的,不是给开发者用的。ctr命令行的体验堪称反人类,你不会想用它来调试一个Node.js应用。所以Docker在开发环境中的统治力依然存在------只是这个存在感越来越依赖Docker Desktop这个收费产品。
Podman 5.0:Red Hat的无守护进程赌注
Podman是这场战争里最激进的挑战者。它的核心哲学就一句话:不需要守护进程,不需要root权限。
Podman 5.0在2026年初发布,带来了几个关键改进:
- Rootless-first架构:默认以非root用户运行容器,无需任何额外配置。2026年的一项500家企业调查显示,Podman 5.0的rootless模式比Docker 27少了27%的安全漏洞
- Podman Machine全面重写:在macOS和Windows上的虚拟机管理体验大幅改善
- 原生支持Kubernetes YAML :直接用
podman play kube部署复合应用 - 与Buildah深度集成:构建镜像不需要Dockerfile,可以直接用脚本
Podman的杀手锏是安全。Docker的守护进程以root运行,这意味着一旦守护进程被攻破,整个宿主机就沦陷了。2025年8月,Docker Desktop爆出CVSS 9.3的容器逃逸漏洞(CVE-2025-9074),恶意容器可以突破隔离获取宿主机管理员权限。这不是理论风险,这是已经发生的事。
但Podman也有短板。它的生态不如Docker成熟,桌面端体验依然粗糙,而且在Windows上的性能表现明显不如Linux。说到底,Podman是一个优秀的运维工具,但不是一个优秀的开发工具。
Nix:容器构建的范式转移
如果说Containerd和Podman还是在Docker定义的赛道上竞争,那Nix是在换赛道。
2026年4月,Container Days London上有一场演讲叫"Beyond Docker Builds",核心观点是:Dockerfile本身就是问题。Dockerfile是命令式的------你写的是"做什么",而不是"要什么"。每一条RUN指令都创建一个新层,层的缓存机制脆弱且不可预测,同一个Dockerfile在不同时间构建可能产出不同的镜像。
Nix用声明式配置解决这个问题。用pkgs.dockerTools.buildImage,你描述的是最终状态,不是过程:
nix
pkgs.dockerTools.buildImage {
name = "my-app";
tag = "latest";
copyToRoot = [ pkgs.nodejs_22 pkgs.myApp ];
config.Cmd = [ "node" "server.js" ];
}
这不仅仅是语法差异。Nix构建的镜像是完全可复现的------同一个Nix表达式,不管在什么时候、什么机器上构建,产出的镜像哈希完全一致。这对供应链安全的意义是根本性的。
nix2container和nixpacks进一步降低了门槛。Railway团队开发的Nixpacks可以自动分析你的项目源码,生成Nix构建计划,再输出OCI镜像。你不需要写Dockerfile,也不需要写Nix表达式------它能自动推断。
但Nix的问题也很明显:学习曲线极其陡峭。Nix语言本身就是一道高墙,更别说Nixpkgs的50000多个包的命名规范和覆盖机制。对于大多数团队来说,投入产出比还不足以说服他们放弃Dockerfile。
Docker的反击:Desktop生态护城河
说Docker已死是不公平的。Docker Inc.很清楚自己的护城河在哪------不是Docker Engine,而是Docker Desktop。
2026年的Docker Desktop 4.44+已经是一个完整的开发平台:内置容器编排、镜像扫描、扩展市场、Dev Environments。对于大多数开发者来说,docker compose up依然是启动一个本地开发环境最快的方式。
Docker Hub依然是最大的容器镜像仓库,月下载量超过200亿次。这个网络效应是Podman和Nix都无法复制的。
但Docker Desktop的商业化策略正在侵蚀它的优势。大型企业需要付费订阅,个人开发者虽然免费但使用限制越来越多。每次Docker调整定价政策,就会有一批团队认真评估Podman或OrbStack作为替代。
谁赢了?取决于你在哪条战线
这场"容器新战争"不是一个赢家通吃的游戏。不同的角色有不同的最优解:
| 场景 | 2026年最佳选择 | 原因 |
|---|---|---|
| K8s生产运行时 | Containerd | 稳定、轻量、CNCF标准 |
| 高安全要求环境 | Podman | Rootless默认、无守护进程 |
| 开发者本地环境 | Docker Desktop / OrbStack | 生态成熟、开箱即用 |
| 供应链安全 & 可复现构建 | Nix + nix2container | 声明式、哈希一致 |
| CI/CD镜像构建 | Buildah / Kaniko | 无守护进程、无需特权 |
| 小团队快速起步 | Docker Compose | 最陡的学习曲线、最丰富的文档 |
真正的趋势:OCI标准才是终局
回到开头的问题:Docker死了吗?
Docker作为一家公司没有死,Docker作为运行时正在边缘化,Docker作为构建标准正在被挑战,Docker作为开发体验依然强势。
但比"Docker死没死"更重要的问题是:OCI(Open Container Initiative)标准已经赢了。 当镜像格式、运行时接口、分发协议全部标准化之后,你用Docker还是Podman、containerd还是CRI-O,本质上只是换了一个前端。
2026年的容器生态正在经历一场"去Docker化"------不是消灭Docker,而是让Docker变得可替换。当一切标准化后,选择运行时就不再是信仰问题,而是工程问题。
这才是Docker真正要担心的:不是竞争对手有多强,而是标准化让差异化消失了。
写在最后
我个人的选择?生产环境全部containerd,本地开发用Docker Desktop(公司掏钱),CI里用Kaniko构建镜像,安全敏感的场景试过Podman rootless。
Nix?我在用,但不会推荐给每个团队。它的学习成本是真实的,ROI要看你的规模。如果你的团队只有5个人,别折腾Nix了,把Dockerfile写好就行。如果你在维护一个100个微服务的平台,Nix的可复现构建会让你省掉无数个凌晨3点的线上排查。
工具没有信仰,只有适用场景。选对的,不选热的。