在 WSL 2 中使用 Docker
2020 年 3 月 2 日,作者:Matt Hernandez,@fiveisprime
去年六月,Docker 團隊宣佈他們將投入精力讓 Docker 在 Windows Subsystem for Linux (WSL) 上執行。這一切都得益於 WSL 架構最近的變化,使其能夠在一個輕量級虛擬機器 (VM) 中執行,我們在之前一篇關於 WSL 2 的部落格文章中討論過這一點。自此公告發布以來,Docker 團隊已經發布了一個包含 WSL 2 支援的 Docker 技術預覽版。
本文將解釋 Docker Desktop 技術預覽版的工作原理,以及如何將 Docker 擴充套件與該技術預覽版結合使用。
工作原理
這個新的 Docker 架構的工作方式很像 Visual Studio Code 的 WSL 遠端開發支援,即在主機上執行的 Docker CLI 會在遠端 WSL 虛擬機器上執行的 Docker 整合包(Docker Integration Package)中執行命令。
圖片來源:Docker Engineering
DockerD 直接在 WSL 內部執行,因此不再需要 Hyper-V 虛擬機器,並且所有 Linux 容器都在 Windows 上的 Linux 使用者空間內執行,從而提高了效能和相容性。
開始設定
首先是一些先決條件
- 為 WSL 2 安裝 Windows 10 Insider Preview build 18975(慢速通道)或更高版本。
- 從 Microsoft store 安裝 Ubuntu。
- 按照這篇指南啟用 WSL 2。
- 為 VS Code 安裝 WSL 擴充套件。
- 安裝 Docker WSL 2 技術預覽版。
安裝後,Docker 將識別到您已安裝 WSL,並提示啟用 WSL 整合。在本教程中,您需要啟用 WSL 整合。
此選項將允許您直接從您的 Linux 發行版內部透過 Docker CLI 訪問 Docker Desktop。
如果您有多個 Linux 發行版,請確保在您的 Docker 設定中只為正確的發行版開啟了 WSL 整合。
配置完成後,所有命令都將在 Linux 上下文中執行——這也包括從 PowerShell 執行的 Docker 命令,因此執行像 docker run mongo…
這樣的命令將會在 WSL 虛擬機器內部啟動一個 Linux 容器。
在 WSL 中執行 docker ps
命令,您將如預期一樣看到該容器。請注意,容器 ID 是匹配的。
使用 VS Code
設定並執行後,您可以安裝 VS Code Docker 擴充套件來訪問您的容器。如果您已經在使用 WSL 2 和 WSL 擴充套件,這將幫助您將 Docker 整合到您的 WSL 工作流中,而無需在需要容器時切換上下文。而且,由於 Docker CLI 的上下文已設定為使用 WSL 中的 DockerD,因此無論您是否使用 WSL 擴充套件開啟 VS Code,該擴充套件都將與您的容器一起工作。
請注意在下面的截圖中,我連線到了 WSL 並在其中工作,並且仍然可以在不改變我偏好的環境(Ubuntu 中的 zsh)的情況下構建/執行容器。
主題:Noctis Sereno
我個人注意到,使用此配置後,容器執行時間有了極大的改善,並且我日常開發工作流的每個部分都保持不變。我還在 WSL 內部使用 Dev Containers 擴充套件來測試特定環境,而無需在我的機器上直接進行設定。
我們需要您的反饋
請記住,您正在使用的是預釋出軟體,雖然 Windows Insiders 慢速通道非常穩定,但您仍可能遇到一些問題。如果您確實發現了某些功能未按預期工作,請透過 Windows 中的反饋工具(Feedback tool)提交問題。任何與 Docker 直接相關的問題或反饋都可以記錄在 Docker for Windows 的程式碼倉庫中。
編碼愉快!
Matt Hernandez,VS Code 專案經理 @fiveisprime