Windows Subsystem for Linux(WSL)無疑大大提升了Windows下程序開發的體驗。
WSL 2向開發者提供的完整的系統調用兼容,使得許多無法在WSL 1中安裝的應用,如Docker在WSL 2下成為可能。
WSL 2要求Windows 10 build 18917 或更高版本,否則無法使用。
查看Win10構建號
win + R
輸入:
winver
彈窗如下,顯示當前的構建號:
如果build低於18917,就需要升級Win 10。
更新Win10到18917+
參考:
https://www.jb51.net/os/win10/678060.html
WSL 1升級WSL2
由於筆者的Win10已經安裝了WSL 1,因此需要從WSL 1升級到WSL 2。
首先啟用“虛擬機平台”可選組件,在管理員身份打開的PowerShell中輸入:
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
執行成功后立即重啟生效。
接着使用命令行設置要由 WSL 2 支持的發行版,在 PowerShell 中運行:
wsl --set-version <Distro> 2
並確保將 <Distro>
替換為發行版的實際名稱。 (可以使用以下命令查看:wsl -l
)。
由於筆者使用的是Ubuntu發行版,因此在powershell中執行:
wsl --set-default-version 2
wsl --set-version Ubuntu 2
其中wsl --set-default-version 2
將今后所有安裝WSL發行版初始化為WSL 2發行版。等待上述轉換完成,這個過程可能會花費一些時間。
接着就可以在powershell中執行:
wsl -l -v
查看使用的WSL的版本。如:
PS C:\WINDOWS\system32> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
在Win10中安裝SSH Client
參考:
https://docs.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_install_firstuse
Powershell啟動WSL
參考:
https://devblogs.microsoft.com/commandline/a-guide-to-invoking-wsl/
即只要在PowerShell中輸入:
wsl
即可啟動WSL。
通過PowerShell命令:
wsl --shutdown
也可以關閉當前運行的所有WSL實例。
除了PowerShell這種方式外,Windows還提供了快捷方式,我們的WSL通常是從Win 10的應用商店中安裝的,找到Win 10本地安裝WSL應用后的快捷方式,也可啟動同時彈出對應WSL的終端。
WSL中安裝SSH服務並啟動
這個過程相當於在Linux中安裝sshd,相關資料非常多,這里不贅述。
后續可以在Win 10中通過ssh客戶端訪問WSL,好處是可以使用自己喜歡的終端工具。
VSCode安裝Remote Development套件
VSCode集成了對WSL的支持,便於在VSCode開發時操作WSL。
參考:
https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack
VSCode中配置SSH Config連接配置文件
示例:
Host WSL-UBUNTU
HostName 172.31.165.60
User darren
其中172.31.165.60
是在WSL中執行網絡查看命令如ifconfig
查詢到的。
VSCode連接成功WSL后,VSCode后續打開的所有Terminal都將是WSL上的終端,而不是Win10本地的終端。
VSCode打開WSL目錄
在VSCode連接到WSL中之后,打開VSCode中的終端,此時終端連接的是WSL,在終端中cd
到目標目錄,輸入:
code .
即可在VSCode中打開WSL內系統的目錄。
Win 10 訪問 WSL內部文件系統
如果我們想在Win 10和WSL之間進行文件的傳輸,Windows提供了非常方便的支持,上述通過VSCode是一種方式。
此外,在WSL中的用戶home目錄,輸入:
explorer.exe .
Win 10就會彈出一個資源瀏覽器,支持以Windows窗口的形式瀏覽WSL中的文件系統,非常方便。
此外,PowerShell提供了一種訪問WSL的命令行形式:
cd \\wsl$\{distro_name}\
例如,我的WSL是Ubuntu發行版,就在PowerShell下輸入:
cd \\wsl$\Ubuntu
即可在PowerShell中瀏覽WSL的文件系統了。
WSL 2的神坑
原本當我在WSL 2 Ubuntu中安裝了Docker-CE,這一在WSL 1中不敢想的事情時,我非常開心,覺得Windows在開發方面終於可以越來越接近MacBook,同時可以和Windows的虛擬機說拜拜了。
但是后續的使用中發現了 WSL 2存在的一個神坑,即每次重啟Windows系統,WSL實例的IP地址就會動態變動,哈哈哈哈哈哈哈,每次查WSL實例的IP也是醉了。
當然網上也有一些開源的解決方案如每次啟動時動態查詢其IP,然后修改Windows的hosts文件,應用對WSL的訪問不要使用IP而是用hosts文件中的主機名等等。
然而我還是覺得為WSL分配固定的IP應該是開發者的剛需,估計后續的Win 10版本也應該會修復這個問題。
總體說來,瑕不掩瑜,筆者已經在Windows 10 WSL 2愉快的玩Docker了,隨着Win 10的不斷成熟,我相信借助WSL應該會成為今后Windows上集成Docker的主流方式。