在我对Hyper-V、WSL终于忍无可忍之后，我大刀阔斧的删掉了Windows 10中所有关于虚拟机的功能（Hyper-V、WSL和Windows SandBox）之后，我收获了VMWare的嵌套虚拟化。自此我又可以在VMWare Workstation中跑Linux，再在Linux中跑VirtualBox运行Windows，然后再在Windows上跑虚拟机了。但随之而来的是如何使用这种嵌套虚拟化的能力弥补我失去的，主要是方便的Linux编译环境和Docker。本文将记述如何使用VMWare搭建一个Linux工作环境和一个Docker服务。预备首先自然是在“启用或关闭Windows功能”中关闭所有与虚拟机相关的功能——Hyper-V、Windows沙盒、WSL、虚拟机平台，以及其他所有和虚拟机沾边的东西，全部取消勾选，重启之后VMWare便可以勾选虚拟化Intel VT-x/EPT了（AMD则是AMD-V/RVI）。接下来便可以开始考虑Docker和Linux环境了。我事先准备了两个安装好的模板，分别是Debian 11.2和OpenSUSE Leap 15.3。准备模板和安装普通虚拟机类似，步骤如下：创建一个虚拟机，默认2核心2GB内存，40GB硬盘，一个NAT网络适配器用于上网，删除声卡和打印机。挂载安装镜像，安装系统，这里我选择了Server角色进行安装，因为不需要图形界面。进行一些通用/初始设置，例如设置一个非root用户，设定禁止root用户登录SSH（虽然root好用，但有时候确实容易翻车），允许非root用户无密码使用sudo命令，安装一些通用的软件包，例如OpenJDK、Python、htop这些。关机，打快照，在虚拟机设置的高级设置中勾选“启用模板模式（用于克隆）”。得益于VMWare Workstation的模板功能，以后需要使用的时候直接右键模板虚拟机，选择完整克隆即可复制一个开箱即用的虚拟机。由于本文配置的虚拟机都是常用虚拟机，因此为他们单独分配一个虚拟网络，配置为VMnet2，仅主机模式，禁用DHCP（我们手动配置静态IP），配置子网IP为10.172.0.0/16。Docker VM首先是一个运行Docker的虚拟机。这个虚拟机基于OpenSUSE Leap 15.3，没用风滚草的原因是我不想每次开启docker之前都要滚动更新，而一不小心还有滚挂的风险。从模板完全克隆一个虚拟机，分配6核心4GB内存，额外加一块VMnet2网卡配置成静态IP用以与主机交互。通过控制台进行如下配置：通过YaST配置第二块网卡（eth1）的IP地址：10.172.1.10/16（避开10.172.0.X上的主机），主机名为vm-docker.internal.skyblond.info在YaST中关闭防火墙（防止后续干扰Docker的端口映射）删除原有的SSH主机密钥（rm -rf /etc/ssh/ssh_host_*）至此我们就可以使用10.172.1.10通过SSH接入虚拟机了。接入虚拟机之后：首先sudo zypper up -y更新一下以表敬意然后安装Docker：sudo zypper install docker python3-docker-compose开启Docker服务：sudo systemctl enable docker将当前用户加入docker组：sudo usermod -G docker -a $USER重启服务器reboot验证docker是否开机自启：docker ps -a重启完成后Docker便可以使用了。日常使用中我经常使用IDEA执行Docker操作，但经过一番尝试发现通过SSH在Windows上连接到Linux服务端还不是很顺溜，所以我决定暂时禁用IDEA的Docker插件，并将整个D盘挂载到Linux系统中（/etc/fstab）：.host:/d /mnt/d fuse.vmhgfs-fuse defaults,allow_other,uid=1000,gid=100,umask=0027 0 0这里我将D盘分享成了d，挂载到了/mnt/d中，所有者是skyblond（uid为1000），组为users（gid为100），权限为0750（u=rwx，g=rx）。当我需要启动docker compose的时候，我便可以通过SSH登录到DockerVM中，切换到/mnt/d/Git/github/ArchiveDAG，一个docker-compose up -d就万事大吉了。这里需要注意的是VMWare共享文件夹没法像Linux文件系统那样，像PostgreSQL需要硬链接，无论如何VMWare也做不到，所以只能将数据文件移动到别的地方，或者使用Docker的volume功能。Linux VMLinux环境就更好办了，把CLion删掉就好了，反正我也不写C/Rust，使用VMWare的模板功能，在需要的时候克隆出一个虚拟机即可，或者索性弄一个新的。目前我的Linux环境配置为OpenSUSE 风滚草，使用KDE桌面。与Leap不同，风滚草总是能享受到比较新的软件，并且对于Python和Java的版本选择会更灵活一些。这里我同样共享了整个D盘，过程与DockerVM完全一致，这里就不多赘述了。关于LinuxVM，我分配的资源比较多：8核心8GB内存60GB硬盘。得益于可以使用VMWare的嵌套虚拟化，因此可以方便的在这个linux中使用VirtualBox和Vagrant测试ansible playbook，或其他简易集群，而避免了对外层的虚拟机大动干戈。由于目前还没有什么使用Linux VM的需求，就暂且先搁置了，什么时候用什么时候再配置。总结舍弃了Hyper-V，也就舍弃了许多方便的功能，例如Docker Desktop，但对应的，获得了嵌套虚拟化的能力，以及关掉Hyper-V之后的性能提升，我认为值得。关于关闭Hyper-V之后的性能提升，简单的说，Windows客户机在关掉Hyper-V之后，减少了一半的CPU核心，但图形界面却比原来流畅了不少。-全文完-