"WSL2+docker desktop windows"和直接在WSL2发行版上安装docker之间的区别是什么?

46

为什么建议在WSL2 + Docker Desktop Windows上运行,而不是直接在WSL2发行版上安装Docker?

看起来两者都可以,但我读到的方法是使用Docker Desktop,我想了解其中的原因。

谢谢


1
请问您能否给我一个参考链接,建议使用WSL2+Docker Desktop Windows,而不是直接在WSL2发行版上安装Docker? - AnjK
1
@AnjanaAK 在WSL中安装/使用Docker的DockerMicrosoft指南都是使用Docker Desktop。 - NotTheDr01ds
5个回答

36
使用Docker Desktop与WSL2集成相比,在WSL2中直接使用docker的主要区别在于其与工具的集成程度。
当您使用Docker Desktop时,可以在Powershell/CMD中访问docker,在Windows上访问文件,有可能切换到Windows容器并在IDE中使用它。
如果您在WSL2中安装docker,则无法直接从Windows访问docker。

谢谢,那么在wsl2中直接使用docker不需要考虑任何性能或问题吗?我没有强烈的使用Windows容器/IDE集成的用例,并发现在网络方面存在一些限制(端口转发是可能的,但无法直接访问容器IP)。 - ant31
2
在WSL2上使用Docker应该与在WSL2上使用Docker桌面版具有相同的性能(因为它们都使用WSL2运行Docker守护程序)。 - jmaitrehenry
3
在我的测试中,如果在WSL内部运行Docker而不使用Docker桌面版,则内存消耗会减少(至少减少五倍)。 - phd_coder
@jmaitrehenry 当使用WSL2+docker-for-windows与WSL集成时,我们需要在WSL2上单独安装docker CLI吗?如果这样做,会引起任何冲突吗? - AnjK
此外,如果您是企业用户,现在使用Docker Desktop需要付费 - Chris Collett
为什么要使用WSL呢?为什么不只使用Docker桌面版呢? - jairhumberto

17
Docker桌面版与在WSL2实例中的Docker引擎(CE)之间有以下区别,其中许多重复了其他答案中的内容,但也有很多不同:
Docker桌面版: - 添加额外功能,如容器、镜像和卷的仪表盘视图。 - (可选)自动检查更新并下载。 - (可选)登录Windows时自动启动Docker桌面版。 - 由docker-desktop实例提供的内置Kubernetes本地集群对所有shell(WSL shell、PowerShell和CMD)都可用。 - (预览版)开发环境将代码和服务封装在容器中,可以轻松地与团队成员共享。 - 可从多个WSL2实例、PowerShell和CMD访问Docker桌面版安装的Docker守护程序。 - 默认仍使用WSL2。创建docker-desktop和docker-desktop-data WSL实例。在docker-desktop中安装一个单独的Docker引擎,然后将其公开给其他WSL2实例。例如,在Ubuntu中运行“ls $(command -v docker)”将显示“/usr/bin/docker”是指向“/mnt/wsl/docker-desktop/cli-tools/usr/bin/docker”的符号链接,并且注入到每个WSL实例的“/var/run”中以访问守护程序的Docker套接字。 - 如果系统无法运行WSL2,则可以选择在Windows Pro及更高版本上使用Hyper-V后端。 - 镜像、容器、卷等包含在docker-desktop-data WSL2发行版中,该发行版无法直接访问。使用标准的docker命令导出和移动数据,这是最佳实践。 - 附加值功能(超过Docker引擎和K8S)为封闭源码。 - 公司使用需要付费许可证(当前起价5美元/月)(见脚注)。 - 看起来与开源版本相当接近,虽然我没有注意到CE发布何时被合并到桌面版中所花费的时间。 - 就我所知,没有办法将Docker引擎版本与Docker桌面版分离,因此如果需要,无法回滚到早期的CE版本。
Docker引擎/CE:
  • 只要WSL2支持Docker Engine,它可以直接安装到大多数WSL2发行版中。 换句话说,尽管您可以为WSL2创建一个非常基本的BusyBox发行版(我已经做过了),但没有添加其他依赖项,您将无法在其中运行Docker。 当然,大多数主要的功能齐全的发行版都不会有问题。

  • 开源

  • Kubernetes必须单独配置

  • 安装需要更深入的Linux知识以及对WSL差异的理解。例如,Docker文档假定Systemd可用,并且包管理器一旦安装即启动Docker。但是,在WSL2上并非如此。

  • 图像、容器、卷等放置在您已安装CE的WSL2分发版中。

  • 使用CE版本可以复制许多Docker Desktop功能,但它需要手动操作。例如,如果您付出努力,就没有理由不能创建与其他WSL2实例共享的相同类型的“共享”环境。

  • 始终可以安装所需的任何版本,并且计算机上的不同WSL2分发可以具有不同的Docker Engine / CE版本(如果需要)。


摘要和意见:

请注意,我与Docker没有任何关系或财务利益。

大多数用户最好使用Docker Desktop。 预先集成本身就是节省时间的工具。 对Linux不太熟悉的Windows用户几乎肯定应选择桌面版。

我知道付费模型似乎总是会让社区中的一些人感到不满,但我鼓励那些需要付费许可证的人考虑:

  • 每年60美元,如果Docker Desktop比配置Docker Engine节省了半个小时的时间,它很可能已经为自己付款。 不是您每小时赚取120美元(或者也许您确实如此),但您的雇主希望您至少在这个范围内产生生产力。 您的雇主通常更愿意支付使您更有效率的工具,而不是让您自己开发。

  • 如果您认为Docker是您组织的有价值的工具,则允许其持续开发和维护的财务支持对您的公司也有益。


7
尽管批准回答中提到的所有好处听起来都很有趣。我建议直接在WSL内使用docker-ce,而不是使用Docker Desktop。目前它太容易出现故障。 即使所有问题早已报告,您仍会经常遇到失去Windows浏览器与WSL之间连接或运行在WSL内的应用程序与Docker for Desktop之间连接的问题。关闭Windows时,如果同时拥有Docker桌面,则另一个常见问题也很烦人。
com.docker.wsl-distro-proxy.exe - Application Error
The application was unable to start correctly (0xc0000142).

总之,目前在Windows桌面上使用Docker是一种痛苦的体验。

2
我无法测试它,因为我没有安装Docker桌面版。许多教程都是基于Docker桌面版的,一旦你开始使用docker,这就会让你感到困惑:发行版不知道systemd/systemctl(参见https://dev59.com/tFEG5IYBdhLWcg3wcuD2),你必须使用service start docker(在我的情况下)。当然,在Linux或Windows shell中关于正确主机IP的指南也是不同的。现在我已经开始了,在WSL2内部完成了docker :)。 - questionto42
1
自从这篇文章发布以来,这些痛点中有一些已经得到解决了吗? - Corgalore

0

关于性能差异我不是很确定,但是在WSL2发行版中直接使用Docker时兼容性更好(无需使用Docker Desktop)。例如,我已经为此问题奋斗了将近一年,但仍未得到解决,非常麻烦。

如果您习惯于Linux环境,则在兼容性成为问题时,使用没有Docker Desktop的Docker可能是更好的选择。


-2

Docker与WSL2结合使用,可以在Windows上运行Linux容器,因为它可以直接安装在WSL中。

当您构建应用程序时,可以在dockerfile中使用Linux镜像,而如果没有WSL2,则仅限于使用基于Windows的镜像,因为它安装在Windows内核上。

如果您想了解更多有关如何使其工作的信息,请查看https://codingfullstack.com/cloud/docker-installation-wsl2/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接