“WSL2+docker 桌面窗口”和直接在 WSL2 发行版上安装 docker 的区别?

ant*_*t31 15 docker windows-subsystem-for-linux

为什么建议运行 WSL2+docker 桌面 windows,而不是直接在 WSL2 发行版上安装 docker?

似乎两者都有效,但我读到要走的路是使用 docker 桌面,我试图理解为什么。

谢谢

Not*_*1ds 19

Windows 中的 Docker Desktop 与 WSL2 实例中的 Docker Engine (CE) 之间的差异。其中一些在其他答案中重复,许多则没有:

Docker 桌面:
  • 添加附加功能,例如:

    • 容器、图像和卷的仪表板视图
    • (可选)自动更新检查和下载
    • (可选)登录Windows自动启动Docker Desktop
    • (可选)实例提供的内置 Kubernetes 本地集群docker-desktop可供所有 shell(WSL shell、PowerShell 和 CMD)使用。
    • (预览版)开发环境,如果我总结正确的话,将代码和服务封装在容器中,可以轻松地与其他团队成员共享。
  • 可从多个 WSL2 实例、PowerShell 和 CMD 访问 Docker Desktop 安装中的 Docker 守护程序。

  • 默认情况下仍使用 WSL2。 docker-desktopdocker-desktop-data创建 WSL 实例。安装了一个 Docker 引擎,docker-desktop然后将其暴露给其他 WSL2 实例。例如,ls $(command -v docker)在 Ubuntu 中运行将显示/usr/bin/docker是 的符号链接/mnt/wsl/docker-desktop/cli-tools/usr/bin/docker,并且用于访问守护进程的 Docker 套接字被注入到/var/run每个 WSL 实例中。

  • 如果 WSL2 无法在系统上运行,也可以在 Windows Pro 及更高版本上使用 Hyper-V 后端。

  • 映像、容器、卷等包含在docker-desktop-dataWSL2 发行版中,无法直接访问。docker最佳实践是使用标准命令导出和移动数据。

  • 增值功能(Docker Engine 和 K8S 之上)是闭源的

  • 企业使用需要付费许可证(目前起价为 5 美元/月)(见脚注)

  • 似乎相当密切地跟踪开源版本,尽管我没有太关注 CE 版本合并到 Desktop 之间间隔了多长时间。

  • 据我所知,无法将 Docker Engine 版本与 Docker Desktop 版本解耦,因此如果需要,无法回滚到系统上较早的 CE 版本。

Docker 引擎/CE:
  • 可以直接安装到大多数 WSL2 发行版中,只要该发行版首先支持 Docker 引擎即可。换句话说,虽然您可以为 WSL2 创建一个非常基本的 BusyBox 发行版(我已经完成了),但如果不添加额外的依赖项,您将无法在其中运行 Docker。当然,大多数主要的、功能齐全的发行版都没有问题。

  • 开源

  • Kubernetes 必须单独配置

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

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

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

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


总结及意见:

请注意,我与 Docker 没有关系,也没有经济利益。

Docker Desktop 将为大多数用户提供最好的服务。仅预集成就可以节省时间,而且物有所值。可能不太熟悉 Linux 的 Windows 用户几乎肯定应该选择桌面版本。

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

  • 以每年 60 美元的价格计算,如果 Docker Desktop 比配置 Docker Engine 节省了哪怕半个小时的时间,那么它很可能已经物有所值。并不是说你每小时赚 120 美元(或者也许你确实赚了),而是你的雇主希望你至少能在这个范围内产生生产力。你的雇主通常更愿意花钱购买那些能让你提高工作效率的工具,而不是让你自己动手。

  • 如果您认为 Docker 对您的组织来说是一个有价值的工具,那么允许其持续开发和维护的财务支持也对您的公司有利。


jma*_*nry 15

使用 Docker Desktop 与 WSL2 集成与直接在 WSL2 中使用 docker 而不使用 Docker Desktop 的主要区别在于与工具的集成级别。

当您使用 Docker 桌面时,您可以在 powershell/cmd 中访问 docker,可以在 Windows 上访问您的文件,可以切换到 Windows 容器并在您的 IDE 中使用它。

如果您在 WSL2 发行版中安装 docker,则无法直接从 Windows 访问 docker。

  • WSL2 上的 Docker 应该具有与使用 WSL2 的 Docker Desktop 相同的性能(因为它们使用 WSL2 来运行 docker 守护程序)。 (3认同)
  • 至少在我的测试中,如果在没有 Docker 桌面的 WSL 中运行 docker,内存消耗会减少(减少五倍)。 (2认同)

小智 7

尽管批准的答案中指出的所有好处听起来都很有趣。我建议直接在 WSL 中使用 docker-ce 而不是 Docker for Desktop。目前实在是太麻烦了。

即使所有问题很久以前就已经报告过。您经常会遇到 Windows 浏览器与 WSL 之间的连接丢失或 WSL 内运行的应用程序与 Docker for Desktop 之间的连接丢失的问题。如果在拥有 Docker 桌面时关闭 Windows,另一个常见问题也很烦人:

com.docker.wsl-distro-proxy.exe - Application Error
The application was unable to start correctly (0xc0000142).
Run Code Online (Sandbox Code Playgroud)

总而言之,在桌面 Windows 上使用 Docker 是一件很痛苦的事情。

  • 我无法测试它,因为我还没有安装 Docker Desktop。只是许多教程都是基于 Docker Desktop 的,一旦你必须启动 docker,这就会开始让你感到困惑:发行版 [不知道 systemd / systemctl](/sf/ask/4606978561/ /sudo-systemctl-enable-docker-not-available-automatically-run-docker-at-boot-o),并且您必须使用 service start docker (在我的情况下)。当然,在 Linux 或 Windows shell 中,有关正确主机 IP 的以下指南也有所不同。现在我开始了它,我还使用 WSL2 中的 docker 完成了它:)。 (2认同)