運作方式?
Docker 透過使用 Sysbox 容器執行階段 來實作增強型容器隔離。Sysbox 是標準 OCI runc 執行階段的一個分支,經過修改以增強標準容器隔離和工作負載。如需更多詳細資訊,請參閱幕後原理。
當啟用增強型容器隔離時,使用者透過 docker run
或 docker create
建立的容器會自動使用 Sysbox 啟動,而不是標準的 OCI runc 執行階段。使用者無需執行任何其他操作,可以照常繼續使用容器。例外情況,請參閱常見問題。
即使是使用不安全的 --privileged
旗標的容器,現在也可以使用增強型容器隔離安全地執行,這樣它們就不能再用於入侵 Docker Desktop 虛擬機器 (VM) 或其他容器。
注意
在 Docker Desktop 中啟用增強型容器隔離時,會忽略 Docker CLI
--runtime
旗標。Docker 的預設執行階段仍然是runc
,但所有使用者容器都會隱式地使用 Sysbox 啟動。
增強型容器隔離與Docker Engine 的 userns-remap 模式或無根 Docker不同。
幕後原理
Sysbox 透過使用以下技術來增強容器隔離:
- 在所有容器上啟用 Linux 使用者命名空間(容器中的 root 使用者會映射到 Linux VM 中的非特權使用者)。
- 限制容器掛載敏感的 VM 目錄。
- 審查容器和 Linux 核心之間的敏感系統呼叫。
- 在容器的使用者命名空間和 Linux VM 之間映射檔案系統使用者/群組 ID。
- 在容器內模擬
/proc
和/sys
檔案系統的部分內容。
其中一些功能是由 Docker Desktop 現在已整合的 Linux 核心最新進展所實現。Sysbox 應用這些技術,對容器的功能或效能影響極小。
這些技術補充了 Docker 的傳統容器安全性機制,例如使用其他 Linux 命名空間、cgroup、受限的 Linux 功能、Seccomp 和 AppArmor。它們在容器和 Docker Desktop VM 內的 Linux 核心之間增加了一層強大的隔離。
如需更多資訊,請參閱主要功能和優點。
增強型容器隔離與使用者命名空間重新映射
Docker Engine 包含一項稱為userns-remap 模式的功能,可在所有容器中啟用使用者命名空間。但是,它有一些限制,而且在 Docker Desktop 中不受支援。
Userns-remap 模式與增強型容器隔離類似,兩者都透過利用 Linux 使用者命名空間來改進容器隔離。
然而,增強型容器隔離更先進,因為它會自動為每個容器指派專用的使用者命名空間映射,並新增其他幾項容器隔離功能,旨在保護具有嚴格安全性要求的組織中的 Docker Desktop。
增強型容器隔離與無根 Docker
無根 Docker允許 Docker Engine 以及擴充容器在本機 Linux 主機上以非 root 權限執行。這讓非 root 使用者可以在 Linux 上原生安裝和執行 Docker。
Docker Desktop 不支援無根 Docker。雖然在 Linux 上原生執行 Docker 時,這是一項很有價值的功能,但在 Docker Desktop 中,由於 Docker Desktop 在 Linux VM 中執行 Docker Engine,因此其價值降低。也就是說,Docker Desktop 已經允許非 root 主機使用者執行 Docker,並使用虛擬機器將 Docker Engine 與主機隔離。
與無根 Docker 不同,增強型容器隔離不會在 Linux 使用者命名空間中執行 Docker Engine。而是它會在使用者命名空間中執行該引擎產生的容器。這樣做的好處是繞過了無根 Docker 的限制,並在容器和 Docker Engine 之間建立了更強的界限。
增強型容器隔離旨在確保使用 Docker Desktop 啟動的容器無法輕易入侵 Docker Desktop Linux VM,因此無法修改其中的安全性設定。