wsl2安裝Linux原生Docker

其實wsl安裝Docker相關內容我已經在wsl整合k8s的相關內容中分享過了,但是為了方便各位小伙伴和自己查閱,我今天又做一個一次整理匯總,形成一個專門的文檔,算是對之前內容回顧和總結吧。
wsl的那些事
對WSL有所了解的小伙伴應該都知道,關于wsl其實是有兩個版本的,而且官方文檔也給出了詳細的對比:

詳細對比可以看下官方說明:
https://docs.microsoft.com/zh-cn/windows/wsl/compare-versions
簡單總結下就是:
wsl2有完整的Linux內核,可以支持原生的Linux應用,甚至是運行Liunx GUI應用wsl2相比wsl文件IO性能提升,在文件密集型操作(如git克隆、npm安裝、apt更新、apt升級等)中的速度都明顯更快wsl2有一些缺點:不能訪問從 Windows裝載的文件不支持 同一個項目 Windows和Linux進行交叉編譯不支持串行端口和 USB設備訪問WSL 2的內存使用量會隨使用而縮放
不過windows和wsl2之間是可以實現(xiàn)便捷的文件傳輸?shù)模皇撬麄冎g的傳輸類似于虛擬機的文件傳輸,是基于網絡進行的。如果我們需要在windows訪問wsl中的文件,直接通過文件管理器訪問\\wsl$,然后選擇對應的系統(tǒng)即可:


準備工作
daemonize安裝配置
安裝daemonize是為了讓我們的wsl支持systemctl命令,然后激活Systemd,這些命令在后面啟動docker服務、創(chuàng)建集群的時候都要用到。
安裝命令也很簡單(我一直覺得linux安裝軟件比windows方便,一行命令就完成安裝,它不香嗎):
sudo?apt?install?daemonize?#第二種方式執(zhí)行
sudo?apt?install?-yqq?fontconfig?daemonize?#?第一種方式需要執(zhí)行
因為我已經安裝過了,顯示得可能和你不一樣:

這里有兩種方式。需要注意的是第一種方式需要多安裝一個軟件包:fontconfig
第一種方式
第一種方式需要創(chuàng)建一個腳本,我們直接通過vim創(chuàng)建:
sudo?vim?/etc/profile.d/00-wsl2-systemd.sh
然后將如下內容寫入,保存
#?Create?the?starting?script?for?SystemDvi?/etc/profile.d/00-wsl2-systemd.sh
SYSTEMD_PID=$(ps?-ef?|?grep?'/lib/systemd/systemd?--system-unit=basic.target$'?|?grep?-v?unshare?|?awk?'{print?$2}')
if?[?-z?"$SYSTEMD_PID"?];?then???
??sudo?/usr/bin/daemonize?/usr/bin/unshare?--fork?--pid?--mount-proc?/lib/systemd/systemd?--system-unit=basic.target???
??SYSTEMD_PID=$(ps?-ef?|?grep?'/lib/systemd/systemd?--system-unit=basic.target$'?|?grep?-v?unshare?|?awk?'{print?$2}')
fi
if?[?-n?"$SYSTEMD_PID"?]?&&?[?"$SYSTEMD_PID"?!=?"1"?];?then?
???exec?sudo?/usr/bin/nsenter?-t?$SYSTEMD_PID?-a?su?-?$LOGNAME
fi
然后關閉當前Terminal,重新打開。
第二種方式
下面是第二種方式,這行命令是為了激活我們的systemd命令
sudo?daemonize?/usr/bin/unshare?--fork?--pid?--mount-proc?/lib/systemd/systemd?--system-unit=basic.target
注意
我推薦第一種,第二種雖然第一次是ok的,但是在實際使用中發(fā)現(xiàn),wsl重啟后(或者電腦重啟),第二種方式執(zhí)行docker命令的時候,會報下面的錯,而且我還沒找到解決方案:

安裝原生Docker
這里安裝的是Linux原生的docker,并非是基于windows環(huán)境的,安裝完成后,你就可以在wsl使用原生的docker了
安裝依賴
安裝軟件包以允許 apt通過 HTTPS使用存儲庫
#?安裝?Docker?CE
##?設置倉庫
###?安裝軟件包以允許?apt?通過?HTTPS?使用存儲庫
sudo?apt-get?update?&&?sudo?apt-get?install?apt-transport-https?ca-certificates?curl?software-properties-common
這里是安裝多個軟件的方式,上面總共安裝了四個軟件包,軟件包直接用空格分割。
添加docker官方發(fā)密鑰
###?新增?Docker?的?官方?GPG?秘鑰
curl?-fsSL?https://download.docker.com/linux/ubuntu/gpg?|?sudo?apt-key?add?-
添加docker鏡像地址
###?添加?Docker?apt?倉庫
add-apt-repository?\
??"deb?[arch=amd64]?https://download.docker.com/linux/ubuntu?\
??$(lsb_release?-cs)?\
??stable"
這里會把它添加進/etc/apt/sources.list文件中。
安裝docker
和上面一樣,安裝多個軟件。
##?安裝?Docker?CE
sudo?apt-get?update?&&?sudo?apt-get?install?containerd.io???docker-ce???docker-ce-cli?-y
配置docker
這里主要是設置docker的鏡像倉庫的鏡像地址(有點繞,主要是國內下載鏡像慢,所以需要改成網易等國內的鏡像地址)
sudo?vim?/etc/docker/daemon.json
前面忘記說了,加sudo就是以管理員運行,因為/etc文件夾權限比較高,普通用戶是沒法修改的。然后加入如下內容:
{
??"registry-mirrors":?["https://docker.mirrors.ustc.edu.cn/",?"https://hub-mirror.c.163.com/",?"https://reg-mirror.qiniu.com"],
??"exec-opts":?["native.cgroupdriver=systemd"],
??"log-driver":?"json-file",
??"log-opts":?{
????"max-size":?"100m"
??},
??"storage-driver":?"overlay2"
}
啟動docker
如果前面安裝daemonize采用的第一種方式,就通過下面的方式啟動docker:
#?啟動
service?docker?start
#?重啟
service?docker?restart
#?停止
service?docker?stop
否則下面的命令,如果上面這種方式無法啟動,也可以通過下面的命令試下(萬一好了呢,病急亂投醫(yī)唄):
mkdir?-p?/etc/systemd/system/docker.service.d
#?重啟?docker.
systemctl?daemon-reload
#?重啟
systemctl?restart?docker
#?啟動
systemctl?start?docker
好了,以上就是wsl2安裝原生Linux Docker的所有內容了,感興趣的小伙伴,可以親自動手實踐下。
