其實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
之間是可以實現便捷的文件傳輸的,只是他們之間的傳輸類似於虛擬機的文件傳輸,是基於網絡進行的。如果我們需要在windows
訪問wsl
中的文件,直接通過文件管理器訪問\\wsl$
,然后選擇對應的系統即可:
准備工作
daemonize
安裝配置
安裝daemonize
是為了讓我們的wsl
支持systemctl
命令,然后激活Systemd
,這些命令在后面啟動docker
服務、創建集群的時候都要用到。
安裝命令也很簡單(我一直覺得linux
安裝軟件比windows
方便,一行命令就完成安裝,它不香嗎):
sudo apt install daemonize #第二種方式執行
sudo apt install -yqq fontconfig daemonize # 第一種方式需要執行
因為我已經安裝過了,顯示得可能和你不一樣:
這里有兩種方式。需要注意的是第一種方式需要多安裝一個軟件包:fontconfig
第一種方式
第一種方式需要創建一個腳本,我們直接通過vim
創建:
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
的,但是在實際使用中發現,wsl
重啟后(或者電腦重啟),第二種方式執行docker
命令的時候,會報下面的錯,而且我還沒找到解決方案:
安裝原生Docker
這里安裝的是Linux
原生的docker
,並非是基於windows
環境的,安裝完成后,你就可以在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官方發密鑰
### 新增 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
否則下面的命令,如果上面這種方式無法啟動,也可以通過下面的命令試下(萬一好了呢,病急亂投醫唄):
mkdir -p /etc/systemd/system/docker.service.d
# 重啟 docker.
systemctl daemon-reload
# 重啟
systemctl restart docker
# 啟動
systemctl start docker
好了,以上就是wsl2
安裝原生Linux Docker
的所有內容了,感興趣的小伙伴,可以親自動手實踐下。