WSL,Windows Subsystem for Linux,是微軟開發的輕量級虛擬機環境,允許用戶在 Windows上運行完整的Linux內核和用戶空間,適用于Windows的Linux子系統。能實現:
- 運行原生的Linux命令和程序(如apt,gcc,make等);
- 擁有獨立的文件系統;
- 支持網絡、進程等Linux功能。
另有一說,可在WSL上模擬出有限的Linux環境,而不是Linux發行版。
安裝
安裝WSL需要有一些前置操作。
前置操作
打開控制面板,找到【程序和功能】,點擊左側的【啟用或關閉Windows功能】,勾選【適用于Linux的Windows子系統】,需要同時勾選【虛擬機平臺】(下面截圖未勾選):
需要重啟Windows電腦生效。
Docker Desktop
安裝WSL有兩種方式:
- 通過Docker Desktop:實際上還是通過下面的命令行;
- 通過命令行:執行任意wsl命令行可觸發WSL安裝。
下載并安裝Docker Desktop時會出現如下提示:
或者:
正常情況下,用管理員身份啟動Docker Desktop時會觸發WSL的安裝或升級:
也可手動輸入命令行:
安裝WSL系統需要有較好的網絡環境(代理),否則下載速度會非常慢。
安裝成功后,輸入命令wsl -v
查看WSL版本號
輸入命令wsl --list
或wsl --list --verbose
查看子系統列表:
注意到在NAME前面有個*
,VERSION為2。
下面會繼續論述。
WSL和Docker Desktop
Docker Desktop是Docker官方為Windows和macOS提供的一個桌面應用程序,集成:
- Docker Engine:引擎
- Docker CLI:命令行工具
- Kubernetes:可選
- 資源管理器集成
- 與WSL2的深度集成
新版Docker Desktop(v2.3+)在Windows上強烈依賴WSL2,官方推薦并默認使用WSL2作為后端運行環境。
功能 | 使用WSL2的優勢 |
---|---|
完整的Linux內核支持 | Docker 需要Linux特性(如cgroups、namespaces) |
更好的性能 | 相比Hyper-V虛擬機更輕量、更快 |
文件系統互通 | 可無縫訪問Windows文件系統 |
與Ubuntu等發行版共存 | 可在多個終端中使用Docker CLI |
脫離WSL2,能否在Windows上安裝Docker Desktop?
從2020年以后發布的Docker Desktop版本來看,已經無法完全繞過WSL2來運行完整功能的Docker Desktop。
舊版本,如Windows 10企業版/專業版,可使用Hyper-V + Windows Containers來運行Docker Desktop,但:
- 不支持Linux容器(除非切換容器類型)
- 不適合開發者日常使用
- 很多功能受限(如掛載本地目錄、構建鏡像等)
參考:Windows10系統Docker for Windows與VMWare關于Hyper-V問題。
Ubuntu
上面通過Docker Desktop方式安裝WSL,并啟動一個docker-desktop
Linux子系統。
相信很多接觸Linux的同學都是從Ubuntu開始的。WSL能不能安裝Ubuntu系統呢?
當然可以,輸入命令wsl --install Ubuntu
安裝Ubuntu系統:
報錯原因是因為開了代理,就比如此時無法打開Microsoft Store一樣。
關掉代理:
解決方法:手動下載離線安裝包,地址,
安裝成功,輸入命令wsl --list --verbose
:
在CMD下新增窗口的效果:
WSL1和WSL2
Windows1903版本以及以后還支持WSL2。WSL2基于Windows Hyper-V虛擬化技術,啟用更全面的虛擬化功能。兩者比較:WSL2和WSL1,兩者不兼容。WSL2與大多數其他虛擬機產品在開啟虛擬化加速技術諸如 Intel TV-x
/ AMD-V
時是沖突的。
特性 | WSL1 | WSL2 |
---|---|---|
內核支持 | 模擬Linux系統調用(翻譯) | 完整的Linux內核(基于輕量級虛擬機) |
文件系統互通 | 支持Windows與Linux文件系統互相訪問 | 訪問Windows文件慢,Linux文件快 |
網絡 | 與Windows共享IP地址 | 有自己的獨立IP地址 |
GUI應用支持 | 默認不支持(需額外配置) | 可通過設置支持GUI應用 |
啟動速度 | 快 | 稍慢(需要啟動虛擬機) |
硬件支持 | 不支持USB、GPU直接訪問 | 更好地支持GPU、USB(需配合驅動) |
優點 | 文件系統可以無縫互操作;性能高,啟動快 | 支持完整的Linux內核功能,如docker,firewalld;更接近真實Linux環境;支持GUI、網絡服務等高級功能 |
缺點 | 不支持Linux內核特性(如systemd,iptables,mount等);不適合運行需要完整Linux內核的服務或容器,如Docker | 與Windows文件系統交互較慢;有自己的IP地址,需注意防火墻設置;啟動稍慢 |
適合場景 | 開發工具、腳本運行等 | 需要完整Linux環境(如Docker、內核功能) |
WSL1,模擬方式運行Linux用戶態程序,不使用真正的Linux內核,將Linux系統調用翻譯成Windows能理解的NT API。
WSL2,使用Hyper-V技術運行一個完整的Linux內核(輕量級虛擬機),對用戶透明,所有Linux系統調用都直接運行在Linux內核中。
切換WSL版本
可為每個發行版單獨設置使用的WSL版本:
wsl --set-version <DistributionName> 2
wsl --set-version <DistributionName> 1
wsl --set-version Ubuntu 2
wsl --set-version Debian 1
比如
遇到的問題,也就是上面看到的,設置為WSL1之后,Docker Desktop自動停止:
因此,對于Docker Desktop,不能使用WSL 1版本。
切換回去:
還是Stopped狀態:
直接執行wsl
命令即可啟動Docker Desktop(啟動默認發行版):
使用
WSL安裝或升級成功后的效果:
有很多概要性介紹知識。
跨文件系統工作
包括:
- 從Linux訪問Windows文件
- 使用Windows文件資源管理器訪問Linux文件
- 從WSL啟動Windows文件和程序(TODO);
GUI應用
可通過本機Windows交互操作(例如Alt-Tab、開始菜單啟動、任務欄固定以及剪切和粘貼支持)使用基于圖形的Linux應用程序。
可通過sudo apt install <TheApp Narme>
在Ubuntu中嘗試安裝的部分應用列表:
- gedit:基本文本編輯器
- audacity:錄制和編輯音頻文件
- blender:制作3D動畫和可視化效果
- gimp:編輯照片
- nautilus:Linux文件資源管理器
- vlc:視頻播放器
GPU加速
在WSL中運行的Linux二進制文件可自動使用Windows中的GPL來加快性能。
網絡集成
可以跨Windows和Linux操作系統輕松訪問網絡應用。
- 從Windows訪問Linux網絡應用
如果要在Linux分發版中生成網絡應用,則可使用localhost從Windows應用(如Chrome瀏覽器)訪問它。 - 鏡像模式網絡
WSL還包括一種稱為鏡像模式的新網絡模式,添加IPv6支持等高級功能,并且能夠訪問局域網中的網絡應用程序。
發行版管理
WSL是試用不同Linux發行版的好方法。
列出可安裝的WSL發行版命令:wsl.exe -l -o
安裝命名的WSL發行版命令:wsl.exe --install <DistroName>
列出可用的WSL發行版命令:wsl.exe -I
Docker Desktop集成
上面多次提及。
VS Code集成
可直接從VSCode使用WSL作為全時開發環境。
安裝VSCode后,可從Windows終端安裝遠程WSL擴展:code -install-extension_ms-vscode-remote.remote-wsl
實戰
讀寫文件
分兩種場景:
- 在WSL中訪問本地Windows;
- 在本地Windows下訪問WSL系統。
在WSL2中,Windows的文件系統會自動掛載到/mnt
目錄下,比如Windows下的C盤,對應路徑為/mnt/c
。
在Windows中訪問Ubuntu文件,打開(文件)資源管理器,輸入\\wsl$
回車:
雙擊操作,和在Windows下一樣:
設置永久掛載或軟鏈接
如果你經常需要訪問某個 Windows 文件夾,可以創建一個符號鏈接(軟鏈接)到你的 home 目錄:
ln -s /mnt/c/Users/YourName/Documents ~/win_docs
之后就可以用~/win_docs
來快速訪問 Windows 中的文檔目錄。
在 Docker 中掛載 Windows 本地目錄(與 WSL2 配合)
當你使用 Docker Desktop 時,它會自動處理 WSL2 和 Windows 之間的文件系統橋接。
比如你在 Docker 命令中這樣寫:docker run -v /mnt/c/Users/YourName/mycode:/app myimage
等價于把 Windows 的 C:\Users\YourName\mycode 掛載到了容器的 /app 目錄。
注意事項:
- 不要在
/mnt
路徑下運行git、npm、或編譯工具(如make),因為性能差且可能導致數據損壞; - 避免在Windows資源管理器中直接編輯WSL2的Linux文件系統中的文件(如
/home/xxx
),這可能導致權限問題或文件損壞; - 推薦將項目放在Linux文件系統中(如
/home/me
),僅通過/mnt
掛載做臨時拷貝或共享。
告警
wsl: 檢測到 localhost 代理配置,但未鏡像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。
Docker
根據上面的提示,讓我去Docker Desktop設置下,但是找了一圈還是沒有找到配置入口。還是得看文檔,執行命令wsl --set-default Ubuntu
再次在WSL里的Ubuntu系統執行docker,可正常使用。
參考
- 官方文檔
- GPT