Windows 上的 Docker Desktop WSL 2 後端
適用於 Linux 的 Windows 子系統(WSL)2 是 Microsoft 構建的完整 Linux 核心,它允許 Linux 發行版無需管理虛擬機器即可執行。透過在 WSL 2 上執行 Docker Desktop,使用者可以利用 Linux 工作區,避免同時維護 Linux 和 Windows 構建指令碼。此外,WSL 2 還改進了檔案系統共享和啟動時間。
Docker Desktop 使用 WSL 2 中的動態記憶體分配功能來改進資源消耗。這意味著 Docker Desktop 只使用其所需的 CPU 和記憶體資源,同時允許構建容器等 CPU 和記憶體密集型任務執行得更快。
此外,透過 WSL 2,冷啟動後啟動 Docker 守護程序所需的時間顯著縮短。
先決條件
在開啟 Docker Desktop WSL 2 功能之前,請確保您已具備以下條件:
- WSL 版本至少為 2.1.5,但最好是最新版本,以避免 Docker Desktop 無法按預期工作。
- 滿足適用於 Windows 的 Docker Desktop 的系統要求。
- 在 Windows 上安裝了 WSL 2 功能。有關詳細說明,請參閱 Microsoft 文件。
提示為了在 WSL 上獲得更好的體驗,請考慮啟用 WSL 的 autoMemoryReclaim 設定,該設定自 WSL 1.3.10 起可用(實驗性)。
此功能增強了 Windows 主機在 WSL 虛擬機器內回收未使用記憶體的能力,從而確保為其他主機應用程式提供更高的記憶體可用性。此功能對於 Docker Desktop 尤其有利,因為它可防止 WSL VM 在 Docker 容器映象構建期間在 Linux 核心的頁面快取中保留大量記憶體(GB),而在 VM 中不再需要時也不會將其釋放回主機。
開啟 Docker Desktop WSL 2
重要為避免在 Docker Desktop 上使用 WSL 2 時發生任何潛在衝突,您必須在安裝 Docker Desktop 之前解除安裝直接透過 Linux 發行版安裝的任何早期版本的 Docker Engine 和 CLI。
下載並安裝最新版本的適用於 Windows 的 Docker Desktop。
按照常規安裝說明安裝 Docker Desktop。根據您使用的 Windows 版本,Docker Desktop 可能會在安裝過程中提示您開啟 WSL 2。請閱讀螢幕上顯示的資訊並開啟 WSL 2 功能以繼續。
從 Windows 開始選單啟動 Docker Desktop。
導航到 Settings。
從通用選項卡中,選擇使用基於 WSL 2 的引擎。
如果您的系統支援 WSL 2,並且您已安裝 Docker Desktop,則此選項預設開啟。
選擇**應用**。
現在,docker
命令可以透過新的 WSL 2 引擎從 Windows 執行。
提示預設情況下,Docker Desktop 將 WSL 2 引擎的資料儲存在
C:\Users\[USERNAME]\AppData\Local\Docker\wsl
。如果您想更改位置,例如更改到另一個驅動器,可以透過 Docker Dashboard 的Settings -> Resources -> Advanced
頁面進行設定。有關此設定和其他 Windows 設定的更多資訊,請閱讀 更改設定
在 WSL 2 發行版中啟用 Docker 支援
WSL 2 為 Windows 添加了對“Linux 發行版”的支援,其中每個發行版都像一個虛擬機器一樣執行,但它們都執行在單個共享的 Linux 核心之上。
Docker Desktop 不需要安裝任何特定的 Linux 發行版。docker
CLI 和 UI 都可以從 Windows 正常執行,無需任何額外的 Linux 發行版。然而,為了獲得最佳開發體驗,我們建議至少安裝一個額外的發行版並啟用 Docker 支援。
確保發行版在 WSL 2 模式下執行。WSL 可以在 v1 或 v2 模式下執行發行版。
要檢查 WSL 模式,請執行
$ wsl.exe -l -v
要將 Linux 發行版升級到 v2,請執行
$ wsl.exe --set-version (distribution name) 2
要將 v2 設定為未來安裝的預設版本,請執行
$ wsl.exe --set-default-version 2
當 Docker Desktop 啟動時,轉到設定 > 資源 > WSL 整合。
Docker-WSL 整合在預設的 WSL 發行版上啟用,即 Ubuntu。要更改您的預設 WSL 發行版,請執行
$ wsl.exe --set-default <distribution name>
如果“WSL 整合”在“資源”下不可用,則 Docker 可能處於 Windows 容器模式。在工作列中,選擇 Docker 選單,然後選擇“切換到 Linux 容器”。
選擇**應用**。
注意在 Docker Desktop 版本 4.30 及更早版本中,Docker Desktop 安裝了兩個專用內部 Linux 發行版
docker-desktop
和docker-desktop-data
。docker-desktop
用於執行 Docker 引擎dockerd
,而docker-desktop-data
儲存容器和映象。兩者都不能用於一般開發。對於 Docker Desktop 4.30 及更高版本的新安裝,不再建立
docker-desktop-data
。相反,Docker Desktop 為儲存建立和管理自己的虛擬硬碟。docker-desktop
發行版仍被建立並用於執行 Docker 引擎。請注意,如果
docker-desktop-data
發行版已由早期版本的 Docker Desktop 建立,並且尚未全新安裝或恢復出廠設定,則 Docker Desktop 4.30 及更高版本將繼續使用該發行版。
Docker Desktop 中的 WSL 2 安全性
Docker Desktop 的 WSL 2 整合在 WSL 的現有安全模型內執行,並且不會在標準 WSL 行為之外引入額外的安全風險。
Docker Desktop 在其自己的專用 WSL 發行版 docker-desktop
中執行,該發行版遵循與任何其他 WSL 發行版相同的隔離特性。Docker Desktop 與其他已安裝的 WSL 發行版之間的唯一交互發生在設定中啟用 Docker Desktop WSL 整合功能時。此功能允許從整合發行版輕鬆訪問 Docker CLI。
WSL 旨在促進 Windows 和 Linux 環境之間的互操作性。其檔案系統可透過 Windows 主機 \\wsl$
訪問,這意味著 Windows 程序可以讀取和修改 WSL 中的檔案。此行為並非 Docker Desktop 所特有,而是 WSL 本身的核心方面。
對於關注 WSL 相關安全風險並希望進行更嚴格隔離和安全控制的組織,請在 Hyper-V 模式而非 WSL 2 中執行 Docker Desktop。或者,啟用增強型容器隔離來執行您的容器工作負載。