安裝wsl并啟用其功能需要按以下步驟進(jìn)行操作,這些步驟旨在幫助您在windows上運(yùn)行linux發(fā)行版。
-
啟用WSL
必須啟用“適用于 Linux 的 Windows 子系統(tǒng)”可選功能并重啟計(jì)算機(jī),才能在 Windows 上運(yùn)行 Linux 發(fā)行版。
以管理員身份運(yùn)行 PowerShell(如果已啟用WSL,可跳過此步驟):
Enable-WindowsOptionalFeature -Online -FeatureName microsoft-Windows-Subsystem-Linux Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
-
安裝WSL Linux發(fā)行版
安裝完成后,您可以選擇并安裝所需的Linux發(fā)行版。
WSL1與WSL2的比較
WSL1和WSL2的主要區(qū)別在于后者使用真實(shí)的Linux內(nèi)核,并在托管的虛擬機(jī)中運(yùn)行,提供完整的系統(tǒng)調(diào)用兼容性和跨操作系統(tǒng)的性能優(yōu)化。
WSL2完美支持docker,而WSL1僅能通過模擬Linux API來運(yùn)行。由于WSL2采用在Hyper-V虛擬機(jī)中運(yùn)行的方案,它與原生Linux非常接近。
WSL1沒有Linux內(nèi)核,因此不支持Docker;WSL2是帶有Linux內(nèi)核的輕量化虛擬機(jī),支持Docker。Docker已針對WSL2進(jìn)行了優(yōu)化,安裝時(shí)檢測到WSL2將啟用WSL2后端,使得在Windows和WSL下的Docker操作更加高效。
WSL1不支持Docker的守護(hù)進(jìn)程,但可以使用Docker CLI連接到通過Docker for Windows或其他VM運(yùn)行的遠(yuǎn)程Docker守護(hù)進(jìn)程。
由于WSL1不是真正的Linux系統(tǒng),IO速度和對systemctl、systemd等功能的支持不如原生Linux。
WSL1與Docker集成需要通過Docker for Windows(基于Hyper-V技術(shù))來實(shí)現(xiàn)Docker環(huán)境。
另一種方法是在WSL1中安裝Docker客戶端,通過連接到Docker服務(wù)器來解決使用Docker的問題。(注意:在win10的Linux子系統(tǒng)中無法安裝Docker服務(wù)端,但可以安裝客戶端)
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月正式發(fā)布的Windows 10 v2004版中。WSL2使用真實(shí)的Linux內(nèi)核,提供了幾乎所有Linux的完整功能。啟用WSL2的Linux系統(tǒng)啟動時(shí)間快,內(nèi)存占用少,并且可以直接原生運(yùn)行Docker。VS Code編輯器有Remote-WSL插件,雖然不支持systemctl、systemd和直接運(yùn)行圖形桌面,但整體性能接近于完整的Linux虛擬機(jī)。
升級到WSL2
如果發(fā)現(xiàn)VERSION為1,說明Ubuntu運(yùn)行在WSL1下,可以升級到WSL2。同樣,WSL2也可以降級到WSL1。
wsl -l -v #查看已安裝Linux版本和名稱,完整命令格式:wsl --list --verbose
WSL2需要Windows build 18917更新,而WSL不需要,但建議先更新操作系統(tǒng)再安裝WSL。
WSL2需要更新其內(nèi)核組件,具體步驟參考:https://www.php.cn/link/40a115d736494ae0bf5b6b65c715868d
安裝WSL2之前,必須啟用“虛擬機(jī)平臺”可選功能。
wsl --set-version Ubuntu 2 #升級到WSL2,其中 Ubuntu 是已經(jīng)安裝的Linux名稱,命令格式:wsl --set-version
啟用WSL后,通過wsl$可以訪問WSL文件。
WSL2與Docker集成
最初的WSL是在Windows之上模擬Linux內(nèi)核,但由于Windows和Linux之間的基本差異,某些功能無法與本機(jī)Linux相同地實(shí)現(xiàn),這意味著不可能直接在WSL中運(yùn)行Docker Engine和kubernetes。
在WSL1中,Docker Desktop通過Hyper-V虛擬機(jī)運(yùn)行Docker環(huán)境。
升級到WSL2之后,Docker Desktop可以直接使用WSL2,運(yùn)行在Linux內(nèi)核上。
通過設(shè)置,Docker Desktop可以與WSL2分發(fā)版本集成,無需在WSL中安裝Docker;當(dāng)然,也可以選擇不與Docker Desktop集成,直接在WSL中運(yùn)行Docker容器。
啟用WSL后,Docker運(yùn)行數(shù)據(jù)都在WSL發(fā)行版中,文件位置只能由WSL管理。
安裝Docker后,Docker會自動創(chuàng)建兩個(gè)發(fā)行版:docker-desktop和docker-desktop-data。
WSL發(fā)行版默認(rèn)安裝在c盤的%LOCALAPPDATA%/Docker/wsl目錄下,Docker的運(yùn)行數(shù)據(jù)和鏡像文件存儲在%LOCALAPPDATA%/Docker/wsl/data/ext4.vhdx中。
通過WSL2集成,您可以體驗(yàn)到與Windows的無縫集成,同時(shí)在WSL中運(yùn)行的Linux程序也可以執(zhí)行相同的操作。這對從事面向Linux環(huán)境的項(xiàng)目或?yàn)長inux量身定制的構(gòu)建過程的開發(fā)人員產(chǎn)生了巨大影響,不再需要維護(hù)Linux和Windows構(gòu)建腳本。例如,Docker開發(fā)人員現(xiàn)在可以在Windows上的Linux Docker守護(hù)程序上工作,使用與Linux計(jì)算機(jī)上的開發(fā)人員相同的工具和腳本集。
注:WSL2 Docker最方便的地方是與宿主機(jī)Win10共享network,我們在宿主機(jī)Win10使用localhost加端口號就可以訪問Docker中對應(yīng)container中的服務(wù),十分方便。
WSL的使用
wsl #啟動WSL wsl --shutdown #關(guān)閉所有正在運(yùn)行的 Linux 和 WSL 2
啟動WSL2之后,會在任務(wù)管理器中發(fā)現(xiàn)多了一個(gè)虛擬機(jī)工作線程。
訪問WSL文件
卸載發(fā)行版
有時(shí)候某個(gè)Linux發(fā)行版不再使用,或者是環(huán)境被搞壞需要重裝,這時(shí)候我們可以卸載掉這個(gè)Linux發(fā)行版。方法如下。
首先使用:
wslconfig /l #查看系統(tǒng)內(nèi)安裝的Linux發(fā)行版
然后使用:
wslconfig /u #卸載掉指定的發(fā)行版Linux