現已釋出!閱讀關於 11 月新增功能和修復的內容。

在WSL 2中使用開發容器

2020年7月1日,作者:Brigit Murtaugh,@BrigitMurtaugh

利用Docker容器和Windows Subsystem for Linux 2 (WSL 2)的強大功能,您可以透過在深度整合的Linux核心中的容器沙盒環境中開發應用程式,來保護您的Windows環境。

今年5月,虛擬化領域有幾個令人興奮的訊息:Windows 10 2020年5月更新開箱即用地添加了WSL 2功能,而Docker Desktop Stable 2.3.0.2釋出了正式版(GA),支援WSL 2後端。

早期的博文中,我們探討了如何在WSL 2中使用Docker。第一個要求是安裝Windows Insiders,因為WSL 2支援當時還不是穩定Windows版本的一部分;下一個要求是安裝Docker WSL 2的技術預覽版。現在,Windows WSL 2和Docker支援都已在穩定的GA版本中提供!

在這篇文章中,我們將探討這兩個工具如何協同工作,以及如何在Visual Studio Code中利用它們,在WSL 2中高效地使用開發容器。

虛擬化的新時代

WSL 2和最新版本的Docker Desktop都改變了虛擬化工作方式。

WSL 2

正如在上一篇文章中討論的,WSL 2透過在輕量級虛擬機器(VM)中使用真實的Linux核心,為Windows Subsystem for Linux帶來了一種新方法。它經過最佳化,感覺與Windows環境無縫且深度整合,具有快速啟動時間、較小的資源佔用,並且無需任何VM配置或管理要求。

系統呼叫允許您執行諸如訪問檔案、請求記憶體和建立程序等功能。由於WSL 2包含完整的Linux核心,它具有完整的系統呼叫能力,這意味著您喜歡的應用程式(如Docker)將完全可靠地執行。

Docker

在WSL 1中,由於Windows和Linux之間的根本差異,Docker Engine無法直接在WSL內部執行,Docker團隊開發了一種使用Hyper-V VM和LinuxKit的替代解決方案。然而,由於WSL 2現在具有完整的系統呼叫能力,Docker可以完全在WSL 2中執行,這促使Docker團隊投入了更多精力。

新發布的2020年5月版Docker Desktop可以更快地構建容器並消耗更少的資源,因為它利用了WSL 2的動態記憶體分配。冷啟動時間不到10秒,而在上一個版本中則需要將近一分鐘。此外,Hyper-V不再是必需品,因此本文中詳述的步驟在Windows 10家庭版上也可以使用。

既然Windows中的WSL 2和Docker Desktop都已正式釋出,您可以更放心地在WSL 2中使用開發容器。

入門

先決條件

安裝後,Docker會識別您已安裝WSL,並提示您啟用WSL整合。從彈出視窗中選擇 啟用WSL整合

Docker Desktop WSL integration dialog

可選:安裝新的Windows Terminal以獲得最佳體驗,包括在同一介面中開啟新的PowerShell和Ubuntu終端的能力。

在WSL 2中開啟VS Code

讓我們將VS Code連線到我們的WSL 2引擎。開啟Ubuntu終端,導航到您選擇的原始碼資料夾,然後輸入code .。這將啟動一個VS Code例項,允許您將WSL用作全職開發環境。您也可以從命令面板連線到WSL。我將開啟一個簡單的HelloNode應用程式。

Launch code . from Ubuntu terminal

VS Code開啟後,它會識別我們已安裝WSL,並推薦我們安裝 WSL 擴充套件。我將選擇安裝

WSL extension recommended

安裝擴充套件後,我們可以重新載入VS Code以連線到WSL 2。

Reload VS Code after installing extension

重新載入後,我們可以透過檢查視窗左下角的WSL指示器來確認我們已連線到Ubuntu。

WSL: Ubuntu bottom left indicator

安裝WSL擴充套件後,Remote Explorer已新增到VS Code中。當我們檢視Explorer時,我們可以看到有關我們的Linux發行版的資訊。

Remote Explorer with WSL Targets

使用容器

我們可以利用開發容器擴充套件來檢視和附加到容器,以及各種其他場景,例如:

這些配置允許您輕鬆地在不同機器上重現相同的開發環境,將特定於專案的工具和擴充套件安裝到DevContainer中,並在類似於部署環境的設定中進行開發,而本地機器保持不變。我們還可以使用Docker擴充套件來檢視和附加到容器。

雖然在使用WSL 2引擎時可以從Windows和WSL 2檔案系統訪問原始碼,但我們建議使用WSL 2檔案系統,因為效能要好得多。既然在WSL 2內部使用檔案系統性能更好,讓我們來了解一下如何使用它。

我們需要選擇要在容器中開啟的資料夾。首先,請確保您已安裝開發容器擴充套件。然後,我們可以從已經使用WSL擴充套件開啟的資料夾中呼叫 開發容器:在容器中重新開啟 命令。

我的WSL 2檔案系統上有一個現有的HelloNode資料夾,裡面有我的Node專案。我將選擇:開發容器:在容器中重新開啟

Command Palette: Dev Containers: Reopen in Container

由於倉庫中還沒有DevContainer配置,將出現一個容器定義列表。出現的容器配置定義列表會根據我的專案型別進行過濾。我將選擇Node.js 14

Command Palette: Node.js 14

一個新的VS Code例項開啟。VS Code開始構建映象,然後啟動我們的容器。

VS Code instance starting with Dev Container

我們的應用程式現在有一個.devcontainer資料夾,其中儲存了容器配置資訊。為了再次確認我們已連線到WSL並且位於容器內,讓我們開啟整合終端並檢查uname和Node的版本。

Check uname and node -v

如我們所見,我們的uname返回了Linux,所以我們仍然連線到WSL 2引擎,並且node -v返回了v14.4.0,所以我們已成功配置了Node 14容器。

讓我們嘗試用F5執行我們的應用程式。

Local host running Hello World app

成功!

反饋與延伸閱讀

為了幫助您設定VS Code與WSL和容器,我們在VS Code遠端開發文件中有詳細的文章。如果您對我們的團隊有任何問題或反饋,請隨時在VS Code遠端開發GitHub倉庫上提出問題或透過@code聯絡我們。

編碼愉快!

Brigit Murtaugh, VS Code 專案經理 @BrigitMurtaugh

© . This site is unofficial and not affiliated with Microsoft.