我把 Docker 全删了,结果一切都变简单了
我有一支技术全面、经验丰富的小型团队,专注高效交付中等规模外包项目,有需要外包项目的可以联系我
你真的需要 Docker 吗?
等镜像第 17 次把“半个互联网”拉到本地,CI 流水线等 15 分钟,你就会开始怀疑人生。
以前每个提交、每个分支、每个小修复,都会经历:构建慢、报错玄学、镜像臃肿、本地环境神秘失灵。
为了啥?跑个 Node.js + Redis + PostgreSQL 的普通 Web 应用。
这又不是造火箭。
“最佳实践”说 Docker 能带来隔离、环境一致性、可扩展。我得到的却是:复杂度、YAML 疲劳、破碎的本地环境。
直到有一天,把 Docker 从工作流里连根拔掉。
世界没有崩塌。反而更顺了。
用什么替代了 Docker
大实话:大多数开发不需要 Docker。你真正需要的是可复现和好文档。
问自己:我到底用 Docker 干了什么? 然后,一张镜像一张镜像地替换掉。
1) 本地开发环境 → asdf + direnv + Shell 脚本
我的项目是 monorepo:
React 前端
Node.js API
PostgreSQL
Redis
替代方案:
asdf 管理每个项目的 Node/Postgres 版本
direnv 自动加载环境变量
一个 **
dev.sh**:brew装 Postgres、brew services启 Redis、npm start拉起应用
结果:无容器开销、无上下文切换、飞快。
2) CI/CD 构建 → 原生 Runner + 朴素脚本
以前我的 GitHub Actions 被 Docker 镜像拖到 12 分钟。 现在:
用 GitHub 托管 Runner(Linux,自带 Node)
Shell 脚本完成
npm ci、lint、test不用 DinD、不推镜像、不玩缓存黑魔法
CI 固定 3 分钟。每一次都一样。
3) 部署 → Railway / Fly.io / Deno Deploy(无 Dockerfile)
曾给 Heroku/K8s 写 Dockerfile。现在:
Fly.io:从源码构建,无需 Dockerfile
Deno Deploy:边缘部署,根本没有 Docker 这回事
数据库用 Supabase/Neon:托管、零配置、很快
一句话:It Just Works。
“那开发/生产环境不一致怎么办?”
常听到这句:“Docker 保证环境一致性”。除非你在 Dockerfile 里死磕版本固定、每次都重建(你大概率不会),容器也会漂移:
基础镜像悄悄更新
Alpine 包变了
某一层缓存抽风
切到源码构建 + 轻工具后,环境不一致的 Bug 反而更少。 因为:零碎部件更少、版本边界更清晰、本地环境更透明。
真正的问题不是 Docker,而是你不信任你的环境
Docker 成了一个拐杖,用来遮盖:
糟糕的文档
雪花般的环境
混乱的本地配置
折磨人的入职流程
把 Docker 炸掉后,被迫把这些做好:
写清楚如何安装/运行
版本管理干净
脚本可读、可维护
团队的入职更快、调试更轻松、部署更有底气。
自从不用 Docker 之后,我拿到的实打实收益
构建时间:12 分钟 → 3 分钟
新人入职:2 小时 → 15 分钟(运行脚本直接开工)
磁盘占用:20GB+ Docker 卷 → < 500MB
认知负担:我终于看懂自己栈里发生了什么,不再调“那个容器连不上这个容器”的谜题
你的 CRUD 应用,不需要 K8s
Docker 听起来很酷,Kubernetes 更酷。 但如果你只是做单体 Web + 数据库:一台服务器 + 一个定时任务就够了,不需要集群。
别再跟着 YouTube 把 Todo App 部署上 EKS。别假装你的 Side Project 需要 Helm Chart。如果你不会手写 Nginx,你大概也用不着容器化。
很多人把工具复杂度当成工程成熟度。复杂 ≠ 高级。简单解决真实问题才是本事。 Docker 不会让你的架构更“干净”,它常常只是让它更重。
什么时候 Docker 仍然有意义
这里不是说 Docker 是原罪。它在这些场景很棒:
操作系统级隔离(安全)
多语言混合(Go 后端 + Python ML)
基础设施团队需要生产副本/一致分发
史前依赖地狱
Playwright 之类需要 headless 浏览器的工具
但如果你在做 Node / Rails / Django / Laravel 的普通 Web:从简单开始。
常见问题(FAQ)
Q:开发一定要用 Docker 吗?A:不。用 asdf / nvm / pyenv + Shell 脚本,可以覆盖 Docker 90% 的“环境可复现”价值,而且没有容器开销。
Q:团队协作是不是 Docker 更好?A:只有当你的文档很差时才是。把版本、工具、脚本写清楚,不上容器也能更快上手。
Q:能不用 Docker 部署吗?A:当然。Fly.io / Railway / Vercel / Deno Deploy 都支持源码部署。
Q:Docker 的替代是什么?A:
版本管理:asdf / nvm / pyenv
环境变量:direnv
可复现:Shell 脚本
服务依赖:系统包管理(
brew/apt)部署:源码构建平台
这几样工具,确实让我轻松了
asdf:通用版本管理
direnv:按目录自动加载
.envFly.io:无 Dockerfile 的源码部署
Railway.app:后端一键部署
Supabase:托管 Postgres + Auth
Neon:无服务器 Postgres,弹性强
结尾的重话
你不需要容器。 你需要清晰、克制,以及一个你真正理解的技术栈。
更重要的是: 别再为 DevOps 推特的炫技优化, 开始为速度、心智负担、交付优化。
全栈AI·探索:涵盖动效、React Hooks、Vue 技巧、LLM 应用、Python 脚本等专栏,案例驱动实战学习,点击二维码了解更多详情。

最后:
更多推荐
所有评论(0)