为什么要放弃用Docker?
想当年,我会觉得开发不用Docker,天都要塌了。Docker 几乎是所有开发团队的标配。需要数据库?docker run
一个。要保证环境一致?上 docker-compose
。Docker 就是一块砖,哪里需要往哪里搬。
最开始 Docker 确实解决了很多问题。
但随着时间推移,我慢慢发现,尤其是在本地开发这个场景下,Docker 带来的麻烦似乎比它解决的要多。我会开始想:“我们还在用 Docker,是因为它最好,还是仅仅因为大家都这么用?”
但是,顶着锅盖我也要说一句,在本地开发上,Docker 正在拖慢我们。
当然,每个人都有趁手的工具,我想分享的是为什么Docker会坑我们,以及有没有更好的解决办法。
我不再爱 Docker 的原因
刚开始用 Docker 时,我惊为天人,虽然从中踩了不少坑,学习的曲线又长,但那时候中二病犯了,觉得我自己搞定了一个难题,可厉害了。而且,Docker 让我告别了繁琐的环境配置,每个人的数据库、缓存版本都完全一致,令朕舒心,封为舒妃。
期间当然有不少小问题,但好景不长,很快小问题就变成了日常开发的大阻碍。
我的电脑快被吃掉了
同时运行几个容器,应用服务、数据库、缓存、消息队列,对 CPU 和内存的消耗是巨大的。电脑的风扇开始狂转,电池掉得很快快。就算是简单的开始写代码的动作,也要等几分钟等到容器启动,还要忍受电脑的卡顿,我这个人急性子,每次等到破防。
文件同步,一场噩梦
代码修改后立刻看到效果,是开发者的基本需求。但在 macOS 和 Windows 上,Docker 的文件卷挂载性能一直不理想。改一行代码,等上几秒钟才能看到刷新。这在一天数百次的修改中,累积起来的时间和挫败感是相当可观的。
调试变得更复杂
当容器里出了问题,调试远比在本地直接运行要麻烦。附加调试器、查看日志、追踪性能,都需要额外的步骤。我们花了很多时间去解决容器的问题,而不是业务本身的问题。
所以,我也开始在市面上找有没有 Docker 替代品。
还有哪些选择?
我想找的有两个方向:一是寻找更轻量的容器化工具,二是干脆跳出容器的思维,回归更纯粹的本地开发环境。
更好的容器化工具
对于那些仍然需要容器,或者工作流与 Kubernetes 紧密绑定的开发者来说,放弃 Docker Desktop 不意味着放弃容器。市面上有一些很不错的替代品。
-
Podman: Red Hat 出品,它最大的特点是无守护进程(daemonless)架构。这意味着它本身占用的资源更少,也更安全。它的命令行接口和 Docker 几乎完全一样,你甚至可以用
alias docker=podman
来无缝切换,学习成本很低。
-
Colima: 如果你是 macOS 用户,Colima 是一个很好的选择。它非常轻量,启动速度快,资源消耗小。它在底层使用 Lima(Linux virtual machines on macOS),为你提供了一个运行容器的 Linux 环境,并且与 Docker CLI 兼容。
-
Rancher Desktop: 这是一个开源项目,提供了一个集成了 Kubernetes 和容器管理能力的桌面应用。如果你不仅需要容器,还想在本地跑一个 K8s 集群,Rancher Desktop 是一个功能全面的选择。
这些工具在一定程度上缓解了 Docker Desktop 的性能问题,但它们仍然基于虚拟机技术,无法完全摆脱其固有的性能损耗。
回归原始但更高效的集成环境
在我几乎要放弃的时候,我发现了另一条路:为什么本地开发一定要用容器?尤其对于我们这些主要做 Web 开发的团队来说,追求的无非是开发语言比如Python、Node.js、Rust、MySQL、Redis 等服务的稳定运行。
于是,我把目光投向了新一代的本地集成开发环境。
ServBay
这是我最大发现,也是我目前的主力工具。你可以把它理解为 MAMP 的超级进化版。ServBay 解决了传统集成环境(如 MAMP、XAMPP)的很多痛点。
-
性能优越: 因为所有服务都是在本地原生运行,没有虚拟机的性能开销,无论是应用响应速度还是文件读写,都比 Docker 快得多,ServBay 的安装包体积小巧,只有20MB。
-
灵活的多版本管理: ServBay 允许同时运行多个不同版本的开发语言,包括但不限于Python、Rust、Java PHP、Node.js、MySQL 等服务,并且可以为每个网站指定不同的版本。这在需要维护多个老旧项目时非常方便。
-
易用性: 它提供了一个简洁的图形界面,添加网站、配置域名、一键开启 SSL 都很简单,不需要去手动修改复杂的配置文件。
-
工具集完整: 内置了 Redis、Memcached、DNS 服务器、内网穿透及本地AI等常用工具,开箱即用。
对于绝大多数 Web 开发场景,ServBay 提供的速度和便利性,让我彻底告别了 Docker 带来的风扇噪音和漫长等待。
MAMP / XAMPP / WAMP
这些是老牌的集成环境工具,很多人可能在学习编程的初期都用过。它们足够简单,能够满足一些基础的开发需求。但相比之下,它们在多版本共存、性能和功能扩展性上,已经显得有些陈旧。
到底该如何选择?
停止使用docker 并不是一个绝对的口号,而是一个值得思考的选项。选择哪种工具,取决于你的具体需求。
-
如果你的工作流和 Kubernetes 深度绑定,或者你需要频繁构建不同架构的镜像,那么 Podman 或 Rancher Desktop 这类容器工具依然是你的首选。
-
如果你是 macOS 用户,只想找个轻量的容器运行时,Colima 值得一试。
-
如果是普通的Web开发者,追求本地开发的极致速度和简单性,那么试试 ServBay、MAMP 这样的集成工具也是个不错的选择。它能让你把精力重新聚焦在代码上,而不是和工具搏斗。
结语
技术工具本身没有好坏之分,只有适合与否。Docker 毫无疑问是一项伟大的技术,它改变了软件的交付和部署方式。但在本地开发这个特定的场景里,它可能已经不再是那个最优解。
我们的目标是高效、愉快地编写代码。如果一个工具开始成为你的负担,那就勇敢地去寻找它的替代品。对我而言,放弃 Docker Desktop,是一次正确的选择。我的电脑变得安静了,我的开发体验也更流畅了。