近年來,容器化技術越來越流行,其中最受歡迎的就是 Docker。 Docker 使用管理和封裝應用程序資源的方式,可以減少開發者和系統管理員之間的交互,從而簡化了應用程序的部署和維護。其中一個關鍵特性是它使用的命名空間機制來隔離容器間的進程、網絡、文件系統、用戶 ID 等等。
Docker 中有以下六種命名空間:
1. `pid`: 進程 ID 命名空間,用于隔離進程,每個容器內看到的進程 ID 僅在容器內部有效,不同容器內同樣的 PID 可以對應不同的進程。 2. `net`: 網絡命名空間,用于隔離網絡設備、網絡棧、端口等網絡資源,每個容器內有自己獨立的網絡空間和 IP 地址,并可以使用自己的網絡設備。 3. `ipc`: 進程間通訊命名空間,用于隔離進程間的 IPC(進程間通訊)資源,如信號量、消息隊列等。 4. `uts`: 主機名命名空間,用于隔離主機名和 NIS(網絡信息系統)域名等。 5. `mnt`: 掛載命名空間,用于隔離掛載點(文件系統)。 6. `user`: 用戶 ID 命名空間,用于隔離用戶與用戶組 ID,同時也隔離了用戶的權限。
這些命名空間使得 Docker 能夠提供隔離的 Linux 容器,每個容器似乎都在自己的隔離環境中運行,并以與主機系統分離的方式訪問 Linux 資源。