前言
很多课程的实践要求在*nix
系统下进行某些程序的运行和软件编译,同时某些软件在Windows的环境配置繁琐的让人很绝望,一般实践课的要求是使用VMware系列的虚拟机来搭建环境,其实WSL和Docker在这种轻量使用的情形下是更好的选择.特别是Docker,在同桌还在配置OTP时,我两行代码拉取了Rabbitmq-Management_Alpline,岂不美哉XD
搭建WSL2
请参照Windows系统的官方文档:适用于 Linux 的 Windows 子系统安装指南,WSL并非某个发行版,而是一套类似虚拟机的机制,因此你可以自行选择喜欢的发行版.甚至你可以自行编译,例如 ArchWSL.
请注意,只有版本 1903 或更高版本的Windows10 非家庭版 可以使用全部功能.
更换包管理器源
注意,WSL也需要按照对应的发行版更换镜像源以获得更好的速度.
安装Docker
下载Docker For Windows安装即可,注意Docker倾向于使用WSL2
作为后端虚拟机而非Hyper-V
以提高性能,因此注意要安装上文指南中提到的安装补丁.
使用Docker Hub镜像
在任务栏托盘 Docker 图标内右键菜单选择 Settings
,打开配置窗口后在左侧导航菜单选择 Docker Engine
,在右侧像下边一样编辑 json 文件,在registry-mirrors
数组中加入镜像地址,之后点击 Apply & Restart
保存后 Docker 就会重启并应用配置的镜像地址了。
你可以在这里看到Docker Hub镜像站的可访问情况.
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
Hyper-V 与Idea系的端口冲突
在使用Hyper-V后端的Docker时,可能会出现与Idea占用了同一个动态端口的情况,此时Idea无法启动,提示
Internal error. Please report to http://jb.gg/ide/critical-startup-errors
java.net.BindException: Address already in use: bind
解决方法为:
停用Hyper-V.
可以使用命令行:dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
手动设置端口
netsh int ipv4 add excludedportrange protocol = tcp startport = 6942 numberofports = 1
启用Hyper-V
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
Docker实践
请参考Gitbook项目 Docker — 从入门到实践.
与VSCode协同
作为MS自家的重量级 富文本编辑器 VSCode对WSL的支持十分完善,只需要安装Remote Development
拓展包,(在这里),就可以远程接入Docker\WSL\SSH远端环境.在安装对应语言的拓展(VSCode中)和对应编译器环境(Docker或WSL中),就可以进行调试和编译了.同时,打开文件项目,输入终端命令也和本机没有什么区别.
VSCode 打包的Docker
VSCode也提供了一些几乎即开即用的语言编译调试环境Docker镜像,已经安装Remote Development
中的Remote-Containers
后,在命令面板输入 Remote-Containers: Try a Sample...,会出现准备好的语言环境.
对于特定的Docker 镜像,VSCode还自动侦测可转发的端口,并提供端口转发服务,特别是在Web相关的应用中(官方以Node与PHP为例)格外有用.请参阅官方指南获知更多功能.
与Clion协同
目前我遇见更多的需求是调试C程序,因此我更多的使用Clion中的远程调试功能,虽然没有VSCode与WSL2 深度集成的功能,但是也足够满足一般的调试需要.
Clion 与WSL通信的方式是使用SSH,为了防止对Windows造成影响,一般将SSH端口更改为非22端口,如Jetbrains推荐改为2222
.
在这里,你可以找到比较完善的指南.
注意,对于Clion,在第一次连接远程环境时进行头文件的搜索与同步,可能耗费较长时间.以后也可以在工具
菜单中选择与远程重新同步.