前言
windows10目前推出了WSL2,相對於WSL采用API轉換的方式, WSL2 則完全不同,win10 開始內置了一個輕量級虛擬機,經過不斷的優化,這個虛擬機實現了與 windows 的高度集成,實現了虛擬機的高性能運行,WSL2 便是運行在虛擬機上的一個完整的 linux 內核。因此WSL2給了在windows更接近原生linux的體驗,同時wsl2 的開啟速度有了非常明顯的提升,幾乎不需要再等待。本文探討在win10專業版上利用WSL2安裝docker的2種方式。
操作實踐
1.開啟安裝windows10的WSL2功能
- 更新windows10系統
要升級 windows 系統到 win10 v2004 的內部版本 19041 或更高版本
升級 Windows 可以使用官方的更新助手,非常方便,地址:https://www.microsoft.com/zh-cn/software-download/windows10,在更新過程中,系統可能或多次重啟。
- 打開系統虛擬機平台
系統更新並重啟后,我們就可以開始 wsl 的升級了
首先,需要打開“系統虛擬機平台”功能,在“控制面板\所有控制面板項\程序和功能”中選擇“啟用或者關閉Windows功能”,勾選對應選項即可:
也可以通過在管理員權限下的 cmd 或 PowerShell 中執行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- 下載 wsl2 需要使用的 linux 內核
在 https://docs.microsoft.com/zh-cn/windows/wsl/wsl2-kernel 頁面點擊下載 linux 內核更新包,下載完點擊安裝
- 啟用"適用於 Linux 的 Windows 子系統"這個功能
啟用"適用於 Linux 的 Windows 子系統"這個功能,然后才能在 Windows 上安裝 Linux 發行版,如果之前使用過舊的wsl,此功能應該開啟過。以管理員身份打開 PowerShell 運行如下所示的命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
也可以在“控制面板\所有控制面板項\程序和功能”中選擇“啟用或者關閉Windows功能”,勾選對應選項即可。
- 重啟系統並設置WSL 2 設置為默認版本
# wsl命令可以設置單獨某個具體wsl的linux版本為1版本但是2版本,wsl2速度較於舊版wsl快了很多,有了高鐵還蹬啥自行車。
wsl --set-default-version 2
查看是不是WSL2,
wsl -l -v
2.安裝配置 Linux 發行版
選擇實用比較多的ubuntu版本,其他版本未測試能否安裝成功docker。
- 打開 Microsoft Store,搜索 Terminal,安裝 Windows Terminal,用於后面和 WSL 子系統交互。
- 搜索 Ubuntu,選擇安裝。
安裝完成后,第一次打開 Ubuntu 的時候,將打開一個控制台窗口,會等待幾分鍾來進行配置,啟動完成后為 Ubuntu 創建一個用戶和密碼(如果第一次啟動ubuntu失敗,可以重啟windows10系統再次試下)。
使用 Windows Terminal 來操作 Ubuntu 系統了,在 Windows Terminal 中選擇 Ubuntu 發行版就可以跳轉到 Ubuntu 終端中,使用上面我們配置的用戶名和密碼登錄即可:
由於默認情況下我們不知道 root 用戶的密碼,所以如果我們想要使用 root 用戶的話可以使用 passwd 命令為 root 用戶設置一個新的密碼,同時為了避免sudo切換root是需要輸入密碼,把自己配置的用戶名加到sudo免密中,命令如下:
# 替換leap為自己單獨配置的用戶名
sudo echo "leap ALL=(ALL:ALL) NOPASSWD: ALL" >>/etc/sudoers
- 更換ubuntu的apt安裝源
默認的安裝源相對國內很慢,我們更換源到阿里雲,登錄到ubuntu到操作如下:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal universe
deb http://mirrors.aliyun.com/ubuntu/ focal-updates universe
deb http://mirrors.aliyun.com/ubuntu/ focal multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-security universe
deb http://mirrors.aliyun.com/ubuntu/ focal-security multiverse">/etc/apt/sources.list
執行更新:
apt update && apt upgrade -y
3.安裝docker,以下方式二選一
3.1 原生linux安裝docker方式
因為wsl2已經完整使用了linux內核了,此種方式和先前在linux虛擬機安裝docker類似,步驟如下:
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
$ sudo service docker start
執行腳本安裝過程中,腳本提示“建議使用Docker Desktop for windows”,20s內按Ctrl+C會退出安裝,所以需要等待20s,另外此種方式需要訪問外網。
檢查docker安裝正常
# 檢查dockerd進程啟動
service docker status
ps aux|grep docker
# 檢查拉取鏡像等正常
docker pull busybox
docker images
注意:不同於完全linux虛擬機方式,WLS2下通過apt install docker-ce
命令安裝的docker無法啟動,因為WSL2方式的ubuntu里面沒有systemd。上述官方get-docker.sh安裝的docker,dockerd進程是用ubuntu傳統的init方式而非systemd啟動的。
3.2 Docker Desktop for windows方式
-
Docker 也專門開發了可以使用
WSL2
中的Docker
守護進程的桌面管理程序, 打開 Docker Desktop WSL2 backend 頁面,下載最新的 Docker Desktop for Windows 程序 ,建議下載stable版本。下載地址:https://www.docker.com/products/docker-desktop -
啟動Docker Desktop for Windows,點擊“設置”按鈕,啟用基於
WSL2
的引擎復選框(Use the WSL 2 based engine)
這個時候在 WSL 里面執行 docker 命令還是找不到的
- 在 Resources 的WSL Integration中設置要從哪個 WSL2 發行版中訪問 Docker,如下圖使用的是 Ubuntu。
- 重啟 Docker desktop for Windows,重啟完成后我們就可以在 WSL2里面使用 docker 命令了
- 在WSL2里面執行
df -Th
,會發現增加了一些新的與docker有關的掛載點。
總結
- WSL2下原生linux安裝docker方式和完全linux虛擬機安裝docker類似,區別在於WSL2下的linux不支持systemd。
- Docker Desktop for windows方式,其實質是利用docker的C/S架構,將windows模式下的docker對應docker.sock,docker客戶端二進制和docker的數據目錄掛載到WSL2里面的linux機器,在此linux機器下執行docker命令(docker命令為docker客戶端),實質為客戶端通過 掛載的/var/run/docker.sock文件與windows里面的dockerd服務端進程通信。如下圖,我們在linux下重新啟動linux下dockerd進程,linux模式下下載的busybox鏡像又可以看到了,/var/run/docker.sock的時間戳也被更新了,此時客戶端通過/var/run/docker.sock文件與linux下的dockerd服務端通信。
- 要使用哪個模式下的docker,重啟下該模式下的docker服務端即可,本質都是修改/var/run/docker.sock文件。理論可以同時使用,但是需要修改docker配置,通過-H參數增加dockerd的tcp監聽,執行具體docker命令時指定dockerd監聽的對應IP和端口即可。
如果覺得有幫助,請關注一波 _,后續更新win10下安裝kubernetes教程
歡迎關注微信公眾號—【Linux運維堂】,堅持linux運維精華分享,堅持干貨(talk is cheap,show your code)。