在 WSL 2 中使用 Docker
2020 年 3 月 2 日,作者:Matt Hernandez,@fiveisprime
去年六月,Docker 團隊宣布他們將投資讓 Docker 在 Windows Subsystem for Linux (WSL) 上執行。這一切都歸功於最近 WSL 架構的變更,使其能在輕量型虛擬機器 (VM) 中執行,我們在先前一篇關於 WSL 2 的部落格文章中討論過。自從這項宣布以來,Docker 團隊已發布 Docker 技術預覽版,其中包含支援在 WSL 2 上執行。
本文說明 Docker Desktop 技術預覽版的運作方式,以及如何搭配技術預覽版使用 Docker 擴充功能。
運作方式
這個新的 Docker 架構運作方式非常類似 Visual Studio Code 的 WSL 遠端開發 支援,主機上執行的 Docker CLI 在遠端 WSL VM 上執行的 Docker Integration Package 內執行命令。
圖片來源:Docker Engineering
DockerD 直接在 WSL 內執行,因此不需要 Hyper-V VM,而且所有 Linux 容器都在 Windows 上的 Linux 使用者空間內執行,以提升效能和相容性。
開始設定
首先是一些先決條件
- 安裝 Windows 10 Insider Preview 組建 18975 (慢速) 或更新版本以使用 WSL 2。
- 從 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 VM 內啟動 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 內使用 開發容器 擴充功能,以測試特定環境,而無需直接在我的機器上進行設定。
我們需要您的意見回饋
請記住,您使用的是預先發行軟體,雖然 Windows 測試人員慢速通道非常穩定,但您可能會遇到一些問題。如果您發現任何無法如預期運作的問題,請透過 Windows 中的意見反應工具開啟問題。任何直接的 Docker 問題或意見回饋都可以在 Docker for Windows 存放庫中記錄。
程式碼快樂!
Matt Hernandez,VS Code 專案經理 @fiveisprime