之前有安裝過 WSL(Windows Subsystem for Linux),不過沒怎麼認真地玩過細節。主要還是會想在 Windows 上建立 Docker 的環境,但之前的痛點是在於 Docker Desktop for Windows 原本的作法是要建立在 Hyper-V 之上,也就是會透過在 Hyper-V 上開 VM 的形式來達成建立 container,這效能實在是有點略差。最近看到 Docker Desktop 似乎可以改用 WSL 2 來建立 container,另外又看到有 Windows Terminal 這個東西,看起來可以在 Windows 上弄出很接近 Linux 的環境,所以就想說來試一下這個!
安裝 WSL2
首先可以先看看 WSL 1 和 WSL 2 的差異 [1],最主要對我來說重要的就是 WSL 2 效能提昇了,從結果來說,我目前也感覺 WSL 2 沒有明顯地感覺到慢,所以覺得還不錯。
要安裝 WSL,可以參考微軟的官方文件 [2]。比較簡單的作法是先加入 Windows 測試計畫 [3],加入完成後可能會需要重開機,然後再以系統管理員打開 PowerShell,輸入以下的指令安裝。
wsl --install
我自己因為之前曾經安裝過,所以最主要這裡需要做的事情是以下兩個動作
- 下載 Linux 核心更新套件,也就是 [2] 裡面的步驟 4。
- 在 PowerShell 裡,把 WSL 預設的版本從 WSL 1 改為 WSL 2,也就是 [2] 裡面的步驟 5。
wsl --set-default-version 2
安裝 Ubuntu
接著是要選擇自己喜歡的 Linux Distribution 裝進 Windows 10 裡,這裡我選的是 Ubuntu,所以就是打開 Microsoft Store 搜尋 Ubuntu 然後安裝就好了。如果想要找別的 Linux Distribution,也可以自己搜尋,或者是從 [2] 的步驟 6 這邊的列表進去。
這裡需要注意的地方是,如果是在電腦裡有 WSL 1 但還沒設定 WSL 2 的情況下先安裝過 Linux Distribution 的話,有可能會需要自己把 distribution 的版本切到 WSL 2。檢查方法是在 PowerShell 上輸入以下的指令:
PS C:\WINDOWS\system32> wsl -l -v NAME STATE VERSION * Legacy Stopped 1 docker-desktop-data Running 2 docker-desktop Running 2 Ubuntu Running 1
這裡就可以看到,我的 Ubuntu 目前是跑在 WSL 1 上的。要改為用 WSL 2 執行的話,需要針對這個 distribution 去設定預設版本。
PS C:\WINDOWS\system32> wsl.exe --set-version Ubuntu 2 正在進行轉換,這可能需要幾分鐘的時間... 有關 WSL 2 的主要差異詳細資訊,請瀏覽 https://aka.ms/wsl2 轉換完成。 PS C:\WINDOWS\system32> wsl -l -v NAME STATE VERSION * Legacy Stopped 1 docker-desktop-data Running 2 docker-desktop Running 2 Ubuntu Stopped 2
設定完以後,再檢查一次就可以看到它的 version 變成 2 了。
安裝 Windows Terminal
安裝 Windows Terminal 的部份,建議直接看微軟的官方文件 [4] 比較快,因為官方文件上有截圖 😜。
Windows Terminal 可以開啟不同 profile 的 terminal,用起來其實也還不錯。在有裝好 Ubuntu 以後,Windows Terminal 就會出現 Ubuntu 的選項了。
讓 Docker Desktop 使用 WSL 2
最後一步其實才是我本來的目標,想要讓 Docker 能夠在 WSL 2 上執行。另一個是因為我裝了 Ubuntu 嘛,所以也想要透過 Windows Terminal 在 Ubuntu 裡能夠正常使用 Docker 指令。具體的文件可以參考 [5-6]。
主要會需要做的,就是先把 Docker Desktop 安裝或者升級到最新版,接著做以下兩個設定:
- 在 Settings > General 裡,勾選 Use the WSL 2 based engine。
- 在 Settings > Resources > WSL Integration 裡,將 Enable integration with additional distros 裡你想使用的 Linux Distribution 啟用。例如以我來說就是要啟用 Ubuntu。
如果之前的步驟都有好好做的話,到這裡應該不會遇到什麼問題,這邊做完以後,回去 Windows Terminal 的 Ubuntu 那邊打 docker 指令,應該就能正常使用了。
不過如果遇到了下述的錯誤訊息,那問題就會是 integration 沒有正確打開,有可能要往前推到你的 Linux distribution 沒有正確地以 WSL 2 作為預設的執行環境。
user@DESKTOP:/mnt/c/Users/user$ docker The command 'docker' could not be found in this WSL 2 distro. We recommend to activate the WSL integration in Docker Desktop settings. See https://docs.docker.com/desktop/windows/wsl/ for details.
沒有留言:
張貼留言