Windows 10 安裝 WSL 2 - 含 Docker 建立 Container 管理 Ubuntu 20.04
WSL (Windows Subsystem for Linux) 是微軟專為 Windows 環境下使用Hyper-V 技術執行 Linux 原生作業系統,這時候大家可能會思考的是為何不用 VMware 或 Virtual Box 呢?!
原因大有蹊蹺,我想這也是為何在這邊寫下文章的原因,其實就是顯示卡GPU 支援的關係,有些時候我會使用 GPU CUDA 進行機器學習或深度學習;然而,不論是 VMware 或 Virtual Box 的免費版本虛擬機對於 GPU 的支援很不友善,它們只是利用虛擬的方式來達到支援 GPU (畫面顯示功能),目前我找到的資料說明都是需要直接在(伺服器)主機上安裝 VMware ESXi 系統,並透過 vSphere 技術才有辦法做到在 VMware 虛擬機上抓到實體 GPU,然而這就不是我們要的方式…
而我們要的其實是直接在Win10的虛擬機上就可以直接抓到實體 GPU,也就是我的主機明明是插著 GTX 1060 顯示卡,但在虛擬機裡面只有抓到 Intel CPU 顯示卡(Intel HD Graphics 4600),找了很多相關支援的文章,都是直接被否決掉,所以才毅然決然放棄使用虛擬機 (VMware、Virtual Box),改用 WSL 2 試試看,雖然它也是虛擬出來的,但它就是有辦法抓到實體 GPU,接下來就來說明安裝的步驟吧!
安裝的步驟如下:
------------------------------------------------------------------------------
- 加入 Windows Insider Program (參考加入)
- PowerShell 開啟子系統 Linux
- PowerShell 啟用虛擬機器
- 設定 WSL 2 為預設執行版本並重新開機
- 下載 Linux 核心更新套件
- Microsoft Store 安裝 Linux 發行版本(Ubuntu 20.04)
- 安裝及啟動 Docker
- 安裝 Docker Desktop
- 卸載子系統
- 後記:WSL2 系統支援 GPU 其實沒有那麼難
-------------------------------------------------------------------------------
1. 加入 Windows Insider Program (參考加入)
【設定】 →【更新與安全性】 →【Windows 人員測試計畫】
測試人員計畫目前不一定需要加入,原因是 WSL2 在釋出前 Windows 10 還在一直更新中,其中當時官方是一定要加入測試人員,而且組建要更新在 20215(約2020/8) 以上才能順利執行 WSL2 新功能的支援,但目前若您的系統有持續更新,其實大多已經全面支援。請參考 Nvidia 以下說明(縱使不是測試人員 Windows 10 組建 19044 以上 WSL2 也都可以支援 GPU)
2. PowerShell 開啟子系統 Linux 功能
開啟子系統 Linux 功能
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
3. PowerShell 啟用虛擬機器
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
4. 設定 WSL 2 為預設執行版本並重新開機
再來進入 Windows 的 CMD 輸入以下的指令,設定 WSL 2 為預設執行版本
wsl --set-default-version 2
Windows 系統進行重新開機
5. 下載 Linux 核心更新套件
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
6. Microsoft Store 安裝 Linux 發行版本(Ubuntu 20.04)
https://www.microsoft.com/zh-tw/p/ubuntu-2004-lts/9n6svws3rx71?rtc=1#activetab=pivot:overviewtab
下載完成並進行開啟設定Linux使用者名稱及密碼
設定Ubuntu 20.04 為進入 Linux 的預設子系統(如果您還有安裝其它Linux版本:如SUSE、Centos、Red Hat…,或二個Ubuntu系統以上)
wsl --set-default Ubuntu-20.04
使用以下指令查看設定
wsl -l -v
7. 安裝及啟動 Docker
請依序執行以下步驟:
sudo apt update
sudo apt upgrade
sudo apt install docker.io
sudo service docker start
啟動時發生錯誤,接著要進行下一步驟
8. 安裝 Docker Desktop
下載Docker Desktop later release
安裝完後,會需要登出,請先做好儲存!
開啟Docker程式,依下列步驟設定
Settings →Resources →WSL Integration →啟動自己的虛擬機
OR
如果再不行就在linux環境下執行以下指令:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo service docker start
再來回到 Windows CMD 下指令
wsl -l -v
可以看到除了原本的【Ubuntu-20.04】,其它還多出了以下二個:
docker-desktop-data:用來儲存資料的區域,如同VM 的 VHD 檔案
docker-desktop:核心的服務,基本上等同使用Hyper-V
接下來如何啟動 Linux 呢?請參考以下三種方式
1、【bash】在 Windows 的 CMD 下指令【bash】,即進入預設的 Linux(WSL 2)
2、【wsl -d <distro>】 指定進入哪個 Linux 環境
3、【docker run -it ubuntu bash】這個指令實際上會下載一個 Ubuntu 的 Images,並執行起 Container ,可在 Docker Desktop 儲存庫看到已經受到管理。
9.卸載子系統
預設 wsl2 系統儲存資料夾及檔案(ext4.vhd)大概位址如下
C:\Users\<username>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState
接下來說明一下,如果這個系統我不想要了,先確認一下你的系統是否存在,請在Windows CMD下指令
wsl -l -v
確認存在「Ubuntu-20.04」,就直接下卸載指令
wsl --unregister <distroName>wsl --unregister Ubuntu-20.04或wslconfig /u <distroName>wslconfig /u Ubuntu-20.04
下完指令後,我看一下C:硬碟空間多出11G的空間,確認有刪除子系統!
10. 後記:WSL2 系統支援 GPU 其實沒有那麼難
為何會說到 GPU 支援的問題,因為參考我前面的畫面,其實我在 WSL1 下指令確認是否抓到顯示卡都會出現錯誤訊息,如下指令
nvidia-smi
都會一直出現下面錯誤訊息
nvidia-smi has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
但如果把 WSL1 的系統 Ubuntu 卸載後,重新用 WSL2 安裝一次,並在系統安裝完成後下指令 【nvidia-smi】就直接得到 GPU 支援的訊息畫面,如下:
以上,大致上都可以在 Windows 裡執行起來,接下來就看自己如何來使用它,如果有遇到什麼問題也可以提供出來討論,謝謝!