wsl2安装Linux原生Docker

云中志

共 3394字,需浏览 7分钟

 · 2021-10-16

其实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的所有内容了,感兴趣的小伙伴,可以亲自动手实践下。

- END -


浏览 8
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报