容器僅是内核對進程的謊言,我親手打造一個證明

容器僅是内核對進程的謊言,我親手打造一個證明。
作者以 Rust 從零打造名為「sigil」的容器執行環境,揭露容器本質僅是 Linux 内核為進程提供不同系統視圖的簡單機制,駁斥大眾對 Docker 等複雜工具的刻板印象。
容器核心概念
容器僅是進程獲得系統不同視圖而已。
正常 Linux 程式能看見所有進程、真實檔案系統與主機名稱,但透過 sigil 啟動如 sigil --rootfs ./rootfs -- meow 的指令,即讓進程誤以為身處獨立小型機器。從外部看,它僅是普通進程;內部卻感覺隔離,擁有獨立進程樹、無法窺探主機進程、主機名稱不同,且檔案系統僅限預設的小型 rootfs。
Linux 核心功能組合
sigil 結合數項 Linux 功能實現隔離,核心在於讓内核提供進程獨立視圖。
- namespaces:主軸機制,讓進程擁有獨立視圖。例如 PID namespaces 賦予獨立進程清單,執行
ps僅顯示 namespace 內進程,故 sigil 內 PID 1 為自有 init 進程,其餘皆在其下。 - 檔案系統隔離:mount namespaces 與 chroot 控制根目錄視圖,將進程指向小型 rootfs 資料夾並切換,執行
ls /僅見預設內容,非主機檔案系統;同時於環境內 mount/proc,確保ps等工具正確反映新進程視圖。 - cgroups:將進程群組化並施加控制,讓容器成為内核可管理的單位,而非散亂進程。
執行環境邏輯
除了内核功能,sigil 需自行處理執行邏輯,包括啟動進程、在容器內充當 PID 1、等待子進程並清理。這部分易被低估,衍生許多棘手行為;作者坦承訊號處理尚未完美,正持續改善。
測試驗證
於容器內執行 shell,產生數個背景進程,用 ps 確認僅存在環境內。若於主機顯現或能窺探主機進程,即表示隔離失效,但測試結果皆未發生,證明核心概念奏效。
作者反思與啟發
打造過程中,作者發現容器一旦理解內部機制,便不再感覺特別神奇——僅是内核提供進程隔離途徑,你只需正確串聯這些元件即可。相較 Docker 等成熟工具,sigil 仍缺網路隔離、無映像系統,且內部環境極簡,但已捕捉容器本質:啟動進程、賦予不同系統視圖,並視其為獨立單位。這暴露容器 hype 的虛幻,僅是内核對進程的「謊言」。
程式碼資源
完整程式碼開源於 https://github.com/kayleexx/sigil,歡迎檢視。
此實作不僅簡化容器認知,更凸顯 Linux 内核強大彈性,無需龐大框架即可重現隔離效果,挑戰業界對容器複雜性的迷思。
— mitali (@kayleecodez) April 18, 2026