其实一直在公司使用的是VMWare虚拟机,但是因为最近被公司的相关team扫描出使用的版权有问题,所以只能卸载掉,找了很多办法,哪怕是自费购买也是会有商用的问题,无奈中突然想起WSL,也许这是一个最具性价比且靠谱的解决方案,所以就把安装的过程记录一下。
我的使用场景比较简单,在本机安装CentOS系统,在其中安装Docker以及Vue环境,因为日常的工作是API后端开发,所以在本机搭建前端环境是很有必要的,这样Debug的时候可以方便的进入调试状态,而不用再考虑找Json去测试API。其实使用Linux和Docker其实并非必要,Windows原生环境+Vue命令足以,但是我的目的也是为了持续练习Linux命令,不然时间长了就会忘。
所以文章主要的涉及点为:
1.WSL2中安装CentOS8
2.WSL2中安装Docker
WSL的全称Windows Subsystem for Linux,意为Windows中的Linux子系统,如果你不知道有没有安装过WSL,可以通过在PowerShell中执行wsl –state命令,如果有下图就说明已经安装了。
默认版本为2说明默认是以WSL2的方式进行安装,可以通过wsl –set-default-version命令来修改。如果没有安装WSL,请到控制面板->启用或关闭功能中,将下面两个选项勾选之后,重启系统。
虚拟机平台这个选项一定要勾选,因为被坑过。重启系统之后,不出意外的话执行wsl –state命令应该就能看到结果了。
下面就可以安装Linux的发行版了,目前Windows商店中有Ubuntu等发行版,唯独没有CentOS,如果需要Ubuntu的可以直接去Windows应用商店中搜索安装。CentOS8可以在下面这个网址下载:
https://github.com/mishamosher/CentOS-WSL/releases/tag/8.4-2105
下载其中ZIP文件到本地之后解压缩,可以得到两个文件,双击执行exe文件按提示操作即可,安装完成之后运行exe文件就可以启动CentOS了。
接下来的步骤正如往常一样,设置软件包源,这里就不赘述了。下面就可以安装Docker了,因为我不需要Docker的可视化界面,所以我选择只安装Docker Engine,后期通过命令行来操作,按照下面的步骤执行命令即可:
1.首先移除历史Docker相关软件和组件:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.建立Docker 源:
sudo yum install -y yum-utils
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
3.安装Docker引擎:
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
截止到这里Docker就算安装完成了,正常情况下是使用systemctl命令去启动Docker服务,但是因为WSL是在Windows中运行,而Systemctl要求必须是在Pid=1的进程中启动才行,所以我们没办法使用传统方式以“守护进程”的方式运行Docker,而且建议也不要费劲去尝试在WSL中启用Systemctl,比较繁琐。我想使用WSL的场景应该大多数是本地开发吧,没人会用于生产环境的。所以,直接使用dockerd命令,以单进程的方式启动即可,为了让他后台运行,后面加一个&,即docker&启动。
如果不出意外的话,你应该还会遇到报错:
ERRO[2022-11-21T23:08:11.203948590+08:00] failed to initialize a tracing processor “otlp” error=”no OpenTelemetry endpoint: skip plugin”
INFO[2022-11-21T23:08:11.492250927+08:00] stopping healthcheck following graceful shutdown module=libcontainerd
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables –wait -t nat -N DOCKER: iptables v1.8.4 (nf_tables): CHAIN_ADD failed (No such file or directory): chain PREROUTING
加个参数:sudo dockerd –iptables=false (这里是双-,显示不出来),应该能成功运行了,如果不想每次都输入参数的话,可以编辑/etc/default/docker文件,添加DOCKER_OPTS=”–iptables=false”即可(注意:双-,这里显示不出来)。
题外话:如果你的WSL系统是1,如何转为WSL2?
在PowerShell中使用wsl -l -v命令,可以看到都是WSL1
使用命令wsl –set-version CentOS8 2进行转换