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 上獲得更好的體驗,請考慮啟用 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。

  1. 下載並安裝最新版本的適用於 Windows 的 Docker Desktop

  2. 按照常規安裝說明安裝 Docker Desktop。根據您使用的 Windows 版本,Docker Desktop 可能會在安裝過程中提示您開啟 WSL 2。請閱讀螢幕上顯示的資訊並開啟 WSL 2 功能以繼續。

  3. Windows 開始選單啟動 Docker Desktop。

  4. 導航到 Settings

  5. 通用選項卡中,選擇使用基於 WSL 2 的引擎

    如果您的系統支援 WSL 2,並且您已安裝 Docker Desktop,則此選項預設開啟。

  6. 選擇**應用**。

現在,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 支援。

  1. 確保發行版在 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
    
  2. 當 Docker Desktop 啟動時,轉到設定 > 資源 > WSL 整合

    Docker-WSL 整合在預設的 WSL 發行版上啟用,即 Ubuntu。要更改您的預設 WSL 發行版,請執行

    $ wsl.exe --set-default <distribution name>
    

    如果“WSL 整合”在“資源”下不可用,則 Docker 可能處於 Windows 容器模式。在工作列中,選擇 Docker 選單,然後選擇“切換到 Linux 容器”。

  3. 選擇**應用**。

注意

在 Docker Desktop 版本 4.30 及更早版本中,Docker Desktop 安裝了兩個專用內部 Linux 發行版 docker-desktopdocker-desktop-datadocker-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。或者,啟用增強型容器隔離來執行您的容器工作負載。

其他資源