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
之間是可以實現便捷的檔案傳輸的,只是他們之間的傳輸類似於虛擬機器的檔案傳輸,是基於網路進行的。如果我們需要在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
的所有內容了,感興趣的小夥伴,可以親自動手實踐下。