想當年,我會覺得開發不用Docker,天都要塌了。Docker 幾乎是所有開發團隊的標配。需要數據庫?docker run 一個。要保證環境一致?上 docker-compose。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,是一次正確的選擇。我的電腦變得安靜了,我的開發體驗也更流暢了。