在Windows 10下使用WSL2 + Docker + Terminal + VS Code开发

在使用了10年+纯Mac开发后,我这两年慢慢把开发环境转移到Windows上。

从软件开发,特别是服务器端软件开发的场景下讲,我其实一直认为最佳的开发平台不是Mac也不是Windows,而是Linux。

但随着Windows Subsystem for Linux 2的成熟,我觉得Windows慢慢的已经把原汁原味的Linux给嵌入其中,两者原生系统之间还可以无缝整合,这应该使得Windows 10成为了更完善的开发环境。

WSL2应该会在今年上半年正式发布,目前要使用的话,需要开启Windows Insider模式。

Insider简单的说就是成为预览版的Windows用户,更快获得Windows更新,以使用WSL2等新功能。

要使用WSL2,选择Insider的slow ring模式即可:

启用后,等Windows做若干次升级,便可以直接在Microsoft Store中安装Ubuntu:

新版酷炫的Terminal也是从微软商店中安装:

Docker Desktop也是对WSL2引擎提供了实验支持

需要下载Docker Desktop Edge 2.1.6.0 或者更新的版本,安装后选择启用WSL2引擎:

这样便可直接在WSL的命令行中使用docker:

VS Code也有Remote WSL插件:

安装后可以直接在Windows 10下的VS Code打开Linux中的项目,VS Code的插件也可以安装到Remote中,以开发Go项目为例,就需要将VS Code的go插件也安装一下:

(当然,Linux中需要先自己安装Go。)

这样便可在VS Code中使用Go语言的智能补全等等功能:


我搞这些其实只是为了在Windows愉快的使用Steam跟开发类似traefik这样的项目。

treafik本身是一个类似nginx的服务器端程序,其编译使用了Make脚本,而且还内嵌了一个使用angularjs的管理后台。

为了编译其前端代码,traefik把它的前端依赖都丢去了docker,在docker里面的npm搞出来静态站点后,再让go作为静态资源嵌入。

这就使得在纯windows环境下很难搞定,其编译脚本各种不兼容,虽然可以手动改,但始终是麻烦。

通过WSL2拥有的原生Linux,则使得这些统统不是问题,而且速度非常快,比WSL1快很多。

而VS Code的Remote功能,则确保了我可以在Windows下启动编辑器,确保有Clear Type等等舒服的字体、界面;并通过Remote功能来直接调用Linux下的编译环境。

我并不需要在Windows下安装Go,在Linux下安装就好了。

文件共享也非常方便,启动WSL命令行的时候,默认访问的便是我们Windows的用户目录。

而要从Windows下访问Linux中文件,则可通过网络磁盘映射:\\wsl$\Ubuntu 路径,这样整个Linux文件系统都可以暴露给Windows。


WSL2跟WSL的架构是不一样的,严格的说,WSL2是基于Hyper-V的虚拟机:

https://aster.cloud/2019/08/16/microsoft-build-2019-the-new-windows-subsystem-for-linux-architecture-a-deep-dive/

而从上面的架构图可以看到,WSL2的内核跟Windows是“平级”的,如果我们说WSL2是虚拟机的话,Windows本身也是基于HyperV的“虚拟机”了;所以,为了方便快速了解,我就直接把WSL2说成是原生啦~

编辑于 02-05

文章被以下专栏收录