安裝 WSL
1. 開啟WSL
必須啟用“適用於 Linux 的 Windows 子系統”可選功能並重啟,然後才能在 Windows 上執行 Linux 發行版。
以管理員執行Powershell(開啟WSL,如已開啟可跳過)
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform --啟用“虛擬機器平臺”可選元件
2. 安裝WSL Linux發行版本
比較 WSL 1 和 WSL 2
WSL 1 和 WSL 2 之間的主要區別在於,在託管 VM 內使用實際的 Linux 核心、支援完整的系統呼叫相容性以及跨 Linux 和 Windows 作業系統的效能。
WSL2相比WSL1來說可以完美支援Docker。與WSL1的模擬Linux API不同的是,WSL2採用在Hyper-V虛擬機器中執行的方案。可以說WSL2和原汁原味的Linux已經十分接近
- WSL1 沒有 Linux 核心,不支援 docker;WSL2 是有 Linux 核心的輕量化虛擬機器,支援 docker。
- 目前 docker 已經針對 WSL2 做了適配,安裝時檢測到 WSL2 就會啟用 WSL2 後端,不僅能同時在 Windows 和 WSL 下操作 docker 伺服器,還比以前的 docker on Windows 啟動更快、佔用資源更少。
WSL1
不支援Docker的守護程式,但您可以使用Docker CLI連線到通過Docker for Windows或您建立的任何其他VM 執行的遠端Docker守護程式
不能完全相容systemctl, systemd等等,IO速度相對原生Linux也是大打折扣,在編譯和解壓方面可以很深體會到。畢竟不是真正的Linux,而是掛在Windows NT核心之上的仿Linux 系統
WSL1與Docker 整合
由於WSL 還不是原生的Linux,所以需要藉助Docker for Windows來實現Docker(Docker for Windows 是基於Hyper-V 技術)
另外一種方式是,在WSL1中安裝docker 客戶端,連線 docker server, 來解決在WSL1上使用docker 的問題。(PS: 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](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](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://blog.jayway.com/2017/04/19/running-docker-on-bash-on-windows/>
- Setting Up Docker for Windows and WSL to Work Flawlessly來自 <https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly>
WSL2
WSL2 是第二代 WSL,包含在2020年5月正式釋出 Windows 10 v2004 版中。相比第一代,新的 WSL2 重新設計了架構,使用真正的 Linux 核心,幾乎具有 Linux 的所有完整功能。啟用WSL2的 Linux 系統啟動時間非常快,記憶體佔用很少,並且,WSL 2 還可以直接原生執行 Docker,VS Code 編輯器還有 Remote-WSL 外掛,相對於完整的 linux 虛擬機器只是不支援 systemctl、systemd,不能直接執行圖形桌面。Windows 也越來越向虛擬平臺靠攏,Windows NT 核心和 Linux 核心都是執行在虛擬平臺之上的,是平級的
We will replace the Hyper-V VM we currently use by a WSL 2 integration package. This package will provide the same features as the current Docker Desktop VM: Kubernetes 1-click setup, automatic updates, transparent HTTP proxy configuration, access to the daemon from Windows, transparent bind mounts of Windows files, and more.
升級到WSL2
如果發現VERSION為1,說明Ubuntu執行在WSL1下,可以升級到 WSL2。同樣,WSL2也可以降級到WSL1。
wsl -l -v #檢視已安裝Linux版本和名稱,完整命令格式:wsl --list --verbose
**WSL2需要Windows build 18917 更新, **WSL不需要. 但是最好首先將作業系統更新到需要的版本, 而不是先安裝WSL再更新
WSL 2 需要更新其核心元件。有關資訊,請訪問
https://aka.ms/wsl2kernel
安裝 WSL 2 之前,必須啟用“虛擬機器平臺”可選功能
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會自動建立2個發行版:
- docker-desktop
- docker-desktop-data
WSL發行版預設都是安裝在C盤,在%LOCALAPPDATA%/Docker/wsl目錄
docker的執行資料、映象檔案都存在%LOCALAPPDATA%/Docker/wsl/data/ext4.vhdx中
通過 WSL 2 整合,您仍然可以體驗到與 Windows 的無縫整合,但在 WSL 中執行的 Linux 程式也可以執行相同的操作。這對於從事面向 Linux 環境的專案或為 Linux 量身定製的構建過程的開發人員產生了巨大影響。不再需要維護 Linux 和 Windows 構建指令碼!例如,Docker 的開發人員現在可以在 Windows 上的 Linux Docker 守護程式上工作,使用與 Linux 計算機上的開發人員相同的工具和指令碼集:
注:WSL2 Docker最爽的地方是和宿主機Win10共享network,我們在宿主機Win10使用localhost加埠號就可以訪問Docker中對應container中的服務,十分方便
WSL使用
wsl #啟動
wsl --shutdown #關閉所有正在執行的 Linux 和 WSL 2
啟動 WSL2 之後,會在工作管理員中發現多了一個 虛擬機器工作執行緒
訪問wsl 檔案
解除安裝發行版
有時候某個Linux發行版不再使用,或者是環境被搞壞需要重灌,這時候我們可以解除安裝掉這個Linux發行版。方法如下。
- 首先使用:wslconfig /l 命令檢視系統內安裝的Linux發行版。
- 然後使用:wslconfig /u <發行版名稱>解除安裝掉指定的發行版Linux。