本篇文章更新時間:2026/03/08
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持 。
Docker 十年:為何它能從 Linux 世界一路走向雲端與桌面
編輯前言:這篇文章來自 A Decade of Docker Containers,作者回顧了 Docker 如何在十年間塑造開發者世界,並拆解其技術演進。對任何有在寫程式、部署服務或研究系統架構的人,絕對值得一讀。
核心觀點 (Key Takeaways)
- Docker 的成功來自解決「多語言、多依賴」微服務環境的長期痛點,讓打包、分發、執行變得一致而可預期。
- Docker 的本質不是「迷你 VM」,而是善用 Linux namespaces、分層檔案系統、content-addressable storage 等 OS primitives 重新組合的結果。
- Docker 能跨平台(Mac / Windows)運作,是透過在桌面系統內嵌 Linux VM,再用大量工程手法(例如 vpnkit、eBPF、virtio-fs)讓開發者「感覺像原生」。
- 接下來的挑戰圍繞在多架構(ARM、x86)、GPU、AI 工作負載與安全(TEE)。
深入解析
這篇文章的精彩之處在於:它不只談 Docker 的優點,更回到技術本質,說明 Docker 怎麼把 OS 研究成果串起來,變成人人都能用的工具。
"Docker simplified this process by empowering developers to package their application and all its dependencies into a series of filesystem images."
也就是說,Docker 的革命不是「創造新技術」,而是「把已有的技術轉化為易用的東西」。
Docker 早期:解決 Linux 上的依賴地獄
- 過去要部署軟體,需要手動設定 Linux、編譯各種依賴。
- 虛擬機雖能隔離,但太重、啟動慢、資源重複。
- Docker 的突破在於:利用 Linux namespaces 和 layered filesystem,做到輕量隔離與可重複的環境。
特別是 namespaces(例如 mount、PID、network、IPC),允許不同容器看到不一樣的檔案系統與資源,卻共享同一顆 kernel。這形成 Docker 與 VM 的根本差異。
跨平台挑戰:為何 Docker 能在 Mac、Windows 上跑 Linux 容器?
文章花不少篇幅解釋這一段,我認為是全篇最精彩也最不為人知的技術細節。
關鍵有兩個:
- 在 Mac/Windows 裡「嵌入」一個 Linux VM
- 讓所有 docker build / run 流程看起來像 native
作者提到 HyperKit、LinuxKit、vpnkit、virtio-fs 等技術,都是為了讓「一個 Linux VM」看起來像「不存在」。
例如 vpnkit 的做法,是用 userspace TCP/IP stack 代理容器的網路需求,避開公司防火牆檢查。
這不是硬幹,而是大量工程技巧堆疊起來的結果。
支援 ARM、多架構與 QEMU
隨著 Apple M1 / Graviton 崛起,多架構支援變成必要。Docker 靠:
- OCI multiarch manifests
- binfmt_misc + QEMU 做透明轉譯
這讓開發者不必自己搞 cross-compilation 的細節。
GPU、AI 工作負載的棘手部分
這段也很重要,因為 AI 帶來新的問題:
- GPU driver 和 user-space library 必須匹配
- 多個容器共享一個 kernel,不同版本的 GPU 依賴會衝突
目前 Docker 用 CDI 來做更強大的 device 配置,但 GPU 的 ABI 並不穩定,也還沒有像 CPU syscall 那樣的統一界面。
文章也指出,跨品牌 GPU(例如 Nvidia 與 Apple M 系列)仍然幾乎不可能做到完全可移植。
筆者心得與啟發
讀完這篇文章,我最深的感受是:
Docker 的成功不在於「強大」,而在於「隱形」。
作者再次強調,他們的目的就是讓 Docker 成為「開發者默默依賴,但不需要注意的存在」。從 namespaces 到跨平台 VM,到 GPU 與 TEEs,這些技術在使用者眼裡都不應該看得見。
這讓我想到很多工程產品的本質都相同:
- 把複雜留給自己
- 把簡單留給使用者
另一個啟發是:
現代軟體開發其實已經完全離不開容器化思維。
無論是 AI 模型訓練、科學研究、前後端應用、邊緣設備、甚至太空系統,Docker 已經變成「軟體可移植性」的標準解法。
最後,我很喜歡文末那句話:
Docker wants to be an invisible companion.
對我來說,這種技術的價值,不僅在於能讓東西跑起來,更在於讓開發者能把心力專注在真正的創造,而不是環境問題。
未來隨著 AI 工作流程越來越複雜,我期待 Docker 在 GPU、TEE 和多架構支援上繼續改進,也期待容器技術能讓開發者更自由地移動、創造、實驗。
