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