1. 程式人生 > 其它 >wsl2安裝Linux原生Docker

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 裝載的檔案
    • 不支援 同一個專案WindowsLinux 進行交叉編譯
    • 不支援串列埠和USB 裝置訪問
    • WSL 2 的記憶體使用量會隨使用而縮放

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