安裝wsl并啟用其功能需要按以下步驟進行操作,這些步驟旨在幫助您在windows上運行linux發行版。
-
啟用WSL
必須啟用“適用于 Linux 的 Windows 子系統”可選功能并重啟計算機,才能在 Windows 上運行 Linux 發行版。
以管理員身份運行 PowerShell(如果已啟用WSL,可跳過此步驟):
Enable-WindowsOptionalFeature -Online -FeatureName microsoft-Windows-Subsystem-Linux Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
-
安裝WSL Linux發行版
安裝完成后,您可以選擇并安裝所需的Linux發行版。
WSL1與WSL2的比較
WSL1和WSL2的主要區別在于后者使用真實的Linux內核,并在托管的虛擬機中運行,提供完整的系統調用兼容性和跨操作系統的性能優化。
WSL2完美支持docker,而WSL1僅能通過模擬Linux API來運行。由于WSL2采用在Hyper-V虛擬機中運行的方案,它與原生Linux非常接近。
WSL1沒有Linux內核,因此不支持Docker;WSL2是帶有Linux內核的輕量化虛擬機,支持Docker。Docker已針對WSL2進行了優化,安裝時檢測到WSL2將啟用WSL2后端,使得在Windows和WSL下的Docker操作更加高效。
WSL1不支持Docker的守護進程,但可以使用Docker CLI連接到通過Docker for Windows或其他VM運行的遠程Docker守護進程。
由于WSL1不是真正的Linux系統,IO速度和對systemctl、systemd等功能的支持不如原生Linux。
WSL1與Docker集成需要通過Docker for Windows(基于Hyper-V技術)來實現Docker環境。
另一種方法是在WSL1中安裝Docker客戶端,通過連接到Docker服務器來解決使用Docker的問題。(注意:在win10的Linux子系統中無法安裝Docker服務端,但可以安裝客戶端)
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/Ubuntu/gpg | sudo apt-key add - sudo apt remove gpg sudo apt install gnupg1 sudo apt install software-properties-common sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get -y update sudo apt-get -y install docker-ce echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc && source ~/.bashrc
參考資料
- Running Docker containers on Bash on Windows: https://www.php.cn/link/873a420964dbfac72c5b49ce65cb1991
- Setting Up Docker for Windows and WSL to Work Flawlessly: https://www.php.cn/link/94ac0b3779b362267bc17b1f287b36ed
WSL2
WSL2是WSL的第二代版本,包含在2020年5月正式發布的Windows 10 v2004版中。WSL2使用真實的Linux內核,提供了幾乎所有Linux的完整功能。啟用WSL2的Linux系統啟動時間快,內存占用少,并且可以直接原生運行Docker。VS Code編輯器有Remote-WSL插件,雖然不支持systemctl、systemd和直接運行圖形桌面,但整體性能接近于完整的Linux虛擬機。
升級到WSL2
如果發現VERSION為1,說明Ubuntu運行在WSL1下,可以升級到WSL2。同樣,WSL2也可以降級到WSL1。
wsl -l -v #查看已安裝Linux版本和名稱,完整命令格式:wsl --list --verbose
WSL2需要Windows build 18917更新,而WSL不需要,但建議先更新操作系統再安裝WSL。
WSL2需要更新其內核組件,具體步驟參考:https://www.php.cn/link/40a115d736494ae0bf5b6b65c715868d
安裝WSL2之前,必須啟用“虛擬機平臺”可選功能。
wsl --set-version Ubuntu 2 #升級到WSL2,其中 Ubuntu 是已經安裝的Linux名稱,命令格式:wsl --set-version
啟用WSL后,通過wsl$可以訪問WSL文件。
WSL2與Docker集成
最初的WSL是在Windows之上模擬Linux內核,但由于Windows和Linux之間的基本差異,某些功能無法與本機Linux相同地實現,這意味著不可能直接在WSL中運行Docker Engine和kubernetes。
在WSL1中,Docker Desktop通過Hyper-V虛擬機運行Docker環境。
升級到WSL2之后,Docker Desktop可以直接使用WSL2,運行在Linux內核上。
通過設置,Docker Desktop可以與WSL2分發版本集成,無需在WSL中安裝Docker;當然,也可以選擇不與Docker Desktop集成,直接在WSL中運行Docker容器。
啟用WSL后,Docker運行數據都在WSL發行版中,文件位置只能由WSL管理。
安裝Docker后,Docker會自動創建兩個發行版:docker-desktop和docker-desktop-data。
WSL發行版默認安裝在c盤的%LOCALAPPDATA%/Docker/wsl目錄下,Docker的運行數據和鏡像文件存儲在%LOCALAPPDATA%/Docker/wsl/data/ext4.vhdx中。
通過WSL2集成,您可以體驗到與Windows的無縫集成,同時在WSL中運行的Linux程序也可以執行相同的操作。這對從事面向Linux環境的項目或為Linux量身定制的構建過程的開發人員產生了巨大影響,不再需要維護Linux和Windows構建腳本。例如,Docker開發人員現在可以在Windows上的Linux Docker守護程序上工作,使用與Linux計算機上的開發人員相同的工具和腳本集。
注:WSL2 Docker最方便的地方是與宿主機Win10共享network,我們在宿主機Win10使用localhost加端口號就可以訪問Docker中對應container中的服務,十分方便。
WSL的使用
wsl #啟動WSL wsl --shutdown #關閉所有正在運行的 Linux 和 WSL 2
啟動WSL2之后,會在任務管理器中發現多了一個虛擬機工作線程。
訪問WSL文件
卸載發行版
有時候某個Linux發行版不再使用,或者是環境被搞壞需要重裝,這時候我們可以卸載掉這個Linux發行版。方法如下。
首先使用:
wslconfig /l #查看系統內安裝的Linux發行版
然后使用:
wslconfig /u #卸載掉指定的發行版Linux