一、Docker和WSL2概述
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。一个完整的Docker有以下几个部分组成:
- DockerClient客户端
- Docker Daemon守护进程
- Docker Image镜像
- DockerContainer容器
在windows下配合VS code的Remote - Containers插件,使用体验很不错,缺点就是不像WSL2一样可以在资源管理器中直接处理文件。
但是,Docker本身是基于Linux的。为了让windows用户能够体验docker的便利,docker for windows应运而生。而它则是基于windows subsystem for linux(WSL)的。启动docker可以发现WSL多了docker-desktop和docker-desktop-data两个wsl分发版。而docker就在此基础上运行。(当然最初的docker for windows后端并不是直接使用WSL)。
Windows Subsystem for Linux(简称WSL)是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。如果使用Windows 10 2004以上,可以通过WSL 2来窗口化运行桌面应用,也不需要另外安装其他的X 服务器。
二、WSL安装使用
详细内容参加微软官方文档。用户可以安装微软提供的现成的分发版。可以更改分发版的安装位置,分发版的启动用户等。核心命令是wsl。建议有条件的电脑使用WSL2。
配合VS code的Remote - WSL插件使用很香。
三、基于Docker导入任意WSL分发
微软提供的分发版十分有限,例如就没有CentOS,虽然它已经被Red Hat所放弃,奈何众多服务器仍然使用CentOS。用户可以自定义打包分发版,在github上有许多开源的分发版,例如wsldl-pg/CentWSL。不过微软提供了一个基于Docker容器的方式,详细内容参加官方文档,但值得一提的是,官方文档中使用下述命令导出docker容器,本人实测在wsl导入时会报错“未指定的错误”。1
2docker export <容器名|容器ID> > <目标tar文件> # 报错未指定的错误
docker export -o <目标tar文件> <容器名|容器ID> # 正常被WSL导入
观察两种导出方式发现文件大小并不一致,这或许就是差别所在。
四、基本操作
修改默认登录用户
可以通过wsl命令来指定登录用户wsl -d <分发名称> -u <用户名称>
,但有时候需要修改默认用户为非root用户,可以以root身份创建/etc/wsl.conf
,配置如下1
2[user]
default=用户名
自定义DNS
wsl启动时默认为定义DNS为宿主机的虚拟网卡,但这个速度远不如正经DNS服务器。WSL可以选择禁用默认生成的DNS,即为在/etc/wsl.conf
中配置1
2[network]
generateResolvConf = false
然后重启WSL子系统,自行配置/etc/resolv.conf
(一定要重启,否则修改会被自动纠正)。1
nameserver 114.114.114.114
参考资料
- 微软官方文档
- 百度百科介绍
- Docker官方
- CSDN
- WSL默认用户名root的问题