前言
windows10目前推出了WSL2件余,相對(duì)于WSL采用API轉(zhuǎn)換的方式, WSL2 則完全不同攒至,win10 開始內(nèi)置了一個(gè)輕量級(jí)虛擬機(jī)嘶居,經(jīng)過不斷的優(yōu)化罪帖,這個(gè)虛擬機(jī)實(shí)現(xiàn)了與 windows 的高度集成促煮,實(shí)現(xiàn)了虛擬機(jī)的高性能運(yùn)行,WSL2 便是運(yùn)行在虛擬機(jī)上的一個(gè)完整的 linux 內(nèi)核整袁。因此WSL2給了在windows更接近原生linux的體驗(yàn)菠齿,同時(shí)wsl2 的開啟速度有了非常明顯的提升,幾乎不需要再等待坐昙。本文探討在win10專業(yè)版上利用WSL2安裝docker的2種方式绳匀。
操作實(shí)踐
1.開啟安裝windows10的WSL2功能
- 更新windows10系統(tǒng)
要升級(jí) windows 系統(tǒng)到 win10 v2004 的內(nèi)部版本 19041 或更高版本
升級(jí) Windows 可以使用官方的更新助手,非常方便炸客,地址:https://www.microsoft.com/zh-cn/software-download/windows10疾棵,在更新過程中,系統(tǒng)可能或多次重啟痹仙。
- 打開系統(tǒng)虛擬機(jī)平臺(tái)
系統(tǒng)更新并重啟后是尔,我們就可以開始 wsl 的升級(jí)了
首先,需要打開“系統(tǒng)虛擬機(jī)平臺(tái)”功能开仰,在“控制面板\所有控制面板項(xiàng)\程序和功能”中選擇“啟用或者關(guān)閉Windows功能”拟枚,勾選對(duì)應(yīng)選項(xiàng)即可:
也可以通過在管理員權(quán)限下的 cmd 或 PowerShell 中執(zhí)行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- 下載 wsl2 需要使用的 linux 內(nèi)核
在 https://docs.microsoft.com/zh-cn/windows/wsl/wsl2-kernel 頁(yè)面點(diǎn)擊下載 linux 內(nèi)核更新包,下載完點(diǎn)擊安裝
- 啟用"適用于 Linux 的 Windows 子系統(tǒng)"這個(gè)功能
啟用"適用于 Linux 的 Windows 子系統(tǒng)"這個(gè)功能众弓,然后才能在 Windows 上安裝 Linux 發(fā)行版恩溅,如果之前使用過舊的wsl,此功能應(yīng)該開啟過谓娃。以管理員身份打開 PowerShell 運(yùn)行如下所示的命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
也可以在“控制面板\所有控制面板項(xiàng)\程序和功能”中選擇“啟用或者關(guān)閉Windows功能”脚乡,勾選對(duì)應(yīng)選項(xiàng)即可。
- 重啟系統(tǒng)并設(shè)置WSL 2 設(shè)置為默認(rèn)版本
# wsl命令可以設(shè)置單獨(dú)某個(gè)具體wsl的linux版本為1版本但是2版本滨达,wsl2速度較于舊版wsl快了很多每窖,有了高鐵還蹬啥自行車。
wsl --set-default-version 2
查看是不是WSL2弦悉,
wsl -l -v
2.安裝配置 Linux 發(fā)行版
選擇實(shí)用比較多的ubuntu版本,其他版本未測(cè)試能否安裝成功docker蟆炊。
- 打開 Microsoft Store稽莉,搜索 Terminal,安裝 Windows Terminal涩搓,用于后面和 WSL 子系統(tǒng)交互污秆。
- 搜索 Ubuntu,選擇安裝昧甘。
安裝完成后良拼,第一次打開 Ubuntu 的時(shí)候,將打開一個(gè)控制臺(tái)窗口充边,會(huì)等待幾分鐘來進(jìn)行配置庸推,啟動(dòng)完成后為 Ubuntu 創(chuàng)建一個(gè)用戶和密碼(如果第一次啟動(dòng)ubuntu失敗常侦,可以重啟windows10系統(tǒng)再次試下)。
使用 Windows Terminal 來操作 Ubuntu 系統(tǒng)了贬媒,在 Windows Terminal 中選擇 Ubuntu 發(fā)行版就可以跳轉(zhuǎn)到 Ubuntu 終端中聋亡,使用上面我們配置的用戶名和密碼登錄即可:
由于默認(rèn)情況下我們不知道 root 用戶的密碼,所以如果我們想要使用 root 用戶的話可以使用 passwd 命令為 root 用戶設(shè)置一個(gè)新的密碼际乘,同時(shí)為了避免sudo切換root是需要輸入密碼坡倔,把自己配置的用戶名加到sudo免密中,命令如下:
# 替換leap為自己?jiǎn)为?dú)配置的用戶名
sudo echo "leap ALL=(ALL:ALL) NOPASSWD: ALL" >>/etc/sudoers
- 更換ubuntu的apt安裝源
默認(rèn)的安裝源相對(duì)國(guó)內(nèi)很慢脖含,我們更換源到阿里云罪塔,登錄到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
執(zhí)行更新:
apt update && apt upgrade -y
3.安裝docker,以下方式二選一
3.1 原生linux安裝docker方式
因?yàn)閣sl2已經(jīng)完整使用了linux內(nèi)核了养葵,此種方式和先前在linux虛擬機(jī)安裝docker類似征堪,步驟如下:
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
$ sudo service docker start
執(zhí)行腳本安裝過程中,腳本提示“建議使用Docker Desktop for windows”港柜,20s內(nèi)按Ctrl+C會(huì)退出安裝请契,所以需要等待20s,另外此種方式需要訪問外網(wǎng)夏醉。
檢查docker安裝正常
# 檢查dockerd進(jìn)程啟動(dòng)
service docker status
ps aux|grep docker
# 檢查拉取鏡像等正常
docker pull busybox
docker images
注意:不同于完全linux虛擬機(jī)方式爽锥,WLS2下通過apt install docker-ce
命令安裝的docker無法啟動(dòng),因?yàn)閃SL2方式的ubuntu里面沒有systemd畔柔。上述官方get-docker.sh安裝的docker氯夷,dockerd進(jìn)程是用ubuntu傳統(tǒng)的init方式而非systemd啟動(dòng)的。
3.2 Docker Desktop for windows方式
Docker 也專門開發(fā)了可以使用
WSL2
中的Docker
守護(hù)進(jìn)程的桌面管理程序, 打開 Docker Desktop WSL2 backend 頁(yè)面靶擦,下載最新的 Docker Desktop for Windows 程序 腮考,建議下載stable版本。下載地址:https://www.docker.com/products/docker-desktop啟動(dòng)Docker Desktop for Windows玄捕,點(diǎn)擊“設(shè)置”按鈕踩蔚,啟用基于
WSL2
的引擎復(fù)選框(Use the WSL 2 based engine)
這個(gè)時(shí)候在 WSL 里面執(zhí)行 docker 命令還是找不到的
- 在 Resources 的WSL Integration中設(shè)置要從哪個(gè) WSL2 發(fā)行版中訪問 Docker,如下圖使用的是 Ubuntu枚粘。
- 重啟 Docker desktop for Windows馅闽,重啟完成后我們就可以在 WSL2里面使用 docker 命令了
- 在WSL2里面執(zhí)行
df -Th
,會(huì)發(fā)現(xiàn)增加了一些新的與docker有關(guān)的掛載點(diǎn)。
總結(jié)
- WSL2下原生linux安裝docker方式和完全linux虛擬機(jī)安裝docker類似馍迄,區(qū)別在于WSL2下的linux不支持systemd福也。
- Docker Desktop for windows方式,其實(shí)質(zhì)是利用docker的C/S架構(gòu)攀圈,將windows模式下的docker對(duì)應(yīng)docker.sock暴凑,docker客戶端二進(jìn)制和docker的數(shù)據(jù)目錄掛載到WSL2里面的linux機(jī)器,在此linux機(jī)器下執(zhí)行docker命令(docker命令為docker客戶端)赘来,實(shí)質(zhì)為客戶端通過 掛載的/var/run/docker.sock文件與windows里面的dockerd服務(wù)端進(jìn)程通信现喳。如下圖凯傲,我們?cè)趌inux下重新啟動(dòng)linux下dockerd進(jìn)程,linux模式下下載的busybox鏡像又可以看到了拿穴,/var/run/docker.sock的時(shí)間戳也被更新了泣洞,此時(shí)客戶端通過/var/run/docker.sock文件與linux下的dockerd服務(wù)端通信。
- 要使用哪個(gè)模式下的docker默色,重啟下該模式下的docker服務(wù)端即可球凰,本質(zhì)都是修改/var/run/docker.sock文件。理論可以同時(shí)使用腿宰,但是需要修改docker配置呕诉,通過-H參數(shù)增加dockerd的tcp監(jiān)聽,執(zhí)行具體docker命令時(shí)指定dockerd監(jiān)聽的對(duì)應(yīng)IP和端口即可吃度。