1. 使用Windows子系统Linux(WSL)。 2. 在Windows 10上安装Docker,并使用一个带有Ubuntu的容器。
然而,我找不到一个易于理解的解释它们之间(特指应用程序方面)的区别,以及各自的优缺点。
我找到了一篇关于在WSL上使用Docker的帖子:通过(Windows Linux子系统)和Docker使用Ubuntu。 但是我说的是直接在Windows 10上使用它。所以我会感激任何关于这两种方式的信息。
嗨!我是微软的产品经理,负责WSL和命令行。
WSL允许您在Windows上直接运行原生、未修改的Linux ELF-64二进制文件,并使您能够在Windows“主机”操作系统上运行您喜爱的Linux工具。
WSL1采用了一种方法,在NT内核顶部添加了一个与Linux系统调用兼容的层,允许Linux二进制文件在NT上运行,并与主机操作系统共享相同的底层文件系统、网络、进程列表等。
而即将发布的WSL2则在真正的Linux内核中以轻量级虚拟机的形式运行发行版的二进制文件,该虚拟机只分配应用程序所需的内存,并将释放的内存返回给主机操作系统。这提供了100%的Linux兼容性,使您的Linux工具能够以接近本机性能运行,并从主机获取所需的最小资源,确保您的计算机运行快速流畅。
在WSL2之前,可以在WSL1中运行Docker客户端,使用它来驱动在本地主机上运行的基于Hyper-V的Docker for Windows,或者管理远程Docker服务器。但由于许多技术原因,无法在WSL1上运行Docker Engine。
然而,在WSL2上您可以做同样的事情,但是如果您喜欢的话,您还可以在WSL上运行Docker引擎本身。这是Docker在Windows桌面上运行的首选和未来路径。
要了解更多关于WSL的信息,请查看这里的视频和文档:https://aka.ms/learnwsl
弱点:
几乎任何其他事情。这并不是一件坏事 - Docker是一个很棒的容器化工具,但容器并不意味着以一般意义上的“运行Ubuntu”。
首先(也可能是最重要的),容器是在叠加文件系统中构建起来的,每次进行更改时都会添加一层。因此,每次sudo apt update && sudo apt upgrade
都会在旧版本之上生成一个全新的层。这将是一种非常浪费资源的方式来运行“通用使用”的系统。
通常情况下,每次需要对底层系统进行更改时,都会重新构建容器。
此外,当您在Windows上运行Docker桌面时,几乎总是会使用WSL2后端。在这种情况下,直接在WSL2上使用Ubuntu效率更高。
摘要:
最适合:
弱点:
摘要:
最适合:
弱点:
总结:
最适合:
inotify
支持的任务,因为WSL2目前不支持此功能。弱点:
你运行的应用程序需要“较少使用”的内核功能。由于内核系统调用被“翻译”为Windows API,因此并不支持所有功能。WSL1不支持Cgroups、命名空间和其他功能(但在WSL2和所有其他方法中都支持)。
你使用的应用程序(或遵循的指南)使用Systemd,在WSL(1或2)中不容易支持。
你需要访问桌面环境(Gnome、Xfce4等)。
总结:
最适合:
不太适合:
WSL的一个最大问题是IO,特别是在挂载不同文件系统时。例如,将文件放在Windows中并通过Docker Compose进行映射会非常慢。使用WSL + Docker的另一种方式是将文件移动到该机器上并进行远程连接,就像Visual Studio Code使用Remote-WSL插件一样(https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl)。这样,您可以摆脱不必要的挂载点带来的额外开销,实际上,它们只是网络共享。