# 策展 · X (Twitter) 🔥

> 📖 本站完整內容索引（documentation index）：[llms.txt](/llms.txt)

> 作者：mitali (@kayleecodez) · 平台：X (Twitter) · 日期：2026-04-18

> 原始來源：https://x.com/kayleecodez/article/2045560304365699089

## 中文摘要

容器僅是内核對進程的謊言，我親手打造一個證明。

作者以 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 内核強大彈性，無需龐大框架即可重現隔離效果，挑戰業界對容器複雜性的迷思。

## 標籤

開源專案, Docker, Linux, Rust, Docker
