最近開始改用 WSL2 跑 docker 當開發環境

WSL2 目前只能從 Windows 10 測試人員計畫中升級到 20H1 版本才有,我目前的環境是版本是 Build 18995.1(vb_relesase),確實能夠直接跑 Docker,不需要再安裝 Docker for Windows Desktop 。

安裝 WSL及切換成 WSL2

其實只要照微軟的說明文件就可以了。簡單說明如下 :
打開 Power Shell ,然後執行以下命令啟用

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux 

接著重開機,然後上 Windows Store 安裝 ubuntu,我是安裝 18.04 TLS 版本,安裝完畢後,接著再執行以下命令來切換到 wsl2 的模式。

 wsl --set-version ubuntu-18.04 2 

至此已經完成安裝與設定,現在若跑 ubuntu 應該就是在 WSL2 的模式下運作了。

安裝及啟動 Docker

就跟一般 ubuntu 一樣,直接裝,但是要用 service 來啟動

sudo apt update
sudo apt upgrade
sudo apt install docker.io
sudo service docker start

如果沒意外,執行 ps 命令的時候,應該會有 docker 相關行程在跑了

安裝 portainer

Portainer 是一套很棒的 docker 管理介面,
我也是照著官方的說明文件來安裝的,但我們這邊要依照 Linux 的方式來安裝,過去若使用 Docker for Windows Desktop則是使用 Windows 方式,現在 WSL2 模式則完全是採用 Linux 方式,所以安裝方式如下

sudo docker volume create portainer_data
sudo docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

如果正常跑起來,我們打開瀏覽器 http://localhost:9000/ 應該就出現 portainer 畫面了。

最後,讓開機後第一次登入 Windows 就啟動 docker。

我是按照這篇文章試了有成功

這篇主要就是寫一個啟動 docker 的 script,並將 ubuntu 預設使用者設定不用密碼能執行這支 script,然後利用 Windows 內建的工作排程器設定當第一次登入時,就執行這支 script。因此我們可以直接就寫一隻 start_services.sh,把我們想要啟動的服務都寫進去,例如 docker , ssh 有的沒的通通都可以塞進這支內,由於我的 ubuntu 的預設使用者是 pigo,因此我這隻 script 的完整路徑是 /home/pigo/.local/bin/start_services.sh (記得這支要 chmod +x 使其能執行),而內容我只寫一行,如下 :

service docker start

接下來是編輯 /etc/sudoers 要新增一條,讓用戶 pigo 不用密碼就能直接執行 start_services.sh,我的內容如下 :

pigo ALL=(root) NOPASSWD: /home/pigo/.local/bin/start_services.sh

最後,Windows 內建排程器設定使用者登入就執行,如下圖是工作排程器打開的畫面。

先把滑鼠游標移到工作排程器程式庫,按右鍵,然後選建立基本工作,然後出現如下圖,你可以輸入自己的排程名稱

這裡要選擇在你登入時執行

最後這張圖,把執行的命令及參數分別入
程式或指令碼填 : C:\Windows\System32\bash.exe
新增引數(可省略) 填 : -c "sudo /home/pigo/.local/bin/start_services.sh"

好了,到這裡都完成了,最後提醒,我的範例的使用者都是 pigo,所以上述所有的路徑或設定記得要檢查一下,都設定好後,可以先試著執行看看,然後再進入 ubuntu,應該就有看見 docker 跑起來了。如果能跑起來,下次重開機,登入後應該也是會跑起來才對。

目前有個大問題

如果照上述設定重開機後,可能會發現,明明 WSL 下面行程都有跑起來,但是 port 沒對應到 Windows Host,這個問題 github 上面有很多人反映,我也經常遇到,目前我的解法就是寫個重啟 script , 若遇到這問題,存檔後放到桌面,遇到問題只要執行就好了 , 我是索性上面的自動啟動都沒做,就只留下以下的 script 寫成 wsl_start.bat,需要開發時去執行就夠了

wsl.exe --shutdown
wsl.exe -u root service docker start
wsl.exe -u root service ssh start

還好,我只是拿來開發而已,這一點點小問題並不礙事,就是不能拿來跑正式環境會死人的

2 則評論在 最近開始改用 WSL2 跑 docker 當開發環境.

發佈留言