docker和wsl2哪个好 (如何使用wsl命令)

Docker被认为是建立本地开发环境的领先解决方案。 由于docker-compose文件的简单性,每个项目可以有一个隔离的环境,并且该环境反映了生产环境的相同配置。

而且,该解决方案使开发不受您所拥有的操作系统的约束。 简而言之,即使您的容器是Linux映像,也可以使用Windows或Mac进行开发。

无论如何,在某些设置中,性能可能会降低,从而影响生产率。

从最近的Docker更新开始,Docker工程师增加了使用WSL2技术提高性能的可能性,从而在包括Windows在内的所有平台上提供了相同的开发经验。

本文介绍了为什么我们在Windows上可能存在性能问题,以及如何正确安装WSL2以提高性能。

WSL2如何改变Docker

Docker如何工作

关于Docker的中心部分是它在Windows下的工作方式。因为它共享操作系统,而不是硬件,过去Windows上没有任何基于Linux的容器, 但是每个人都要Windows上使用Linux容器,为了解决这个问题, Docker工程师巧妙地采用的使用虚拟机监控程序(通常是Microsoft HyperV)运行虚拟机,并将VM OS共享到Docker容器。事情就是这样运作的,如下图。

如何使用wsl命令,使用wsl2安装ubuntu

这种架构的主要问题是:

  1. 资源限制。 尽管docker专为共享OS而设计,但管理程序仍在使用硬件,因此您需要为其分配资源。 这导致了与使用虚拟机时同样的性能问题。
  2. 磁盘开销。 容器映像位于VM内,它以卷的形式存储文件,但是您可能希望共享Windows环境中的文件夹,尤其是在开发时。 这是图中的红色箭头往返及其影响性能。

由于Windows上的Docker如果主要用于开发环境中运行Linux容器,那么性能并不重要。实际上,大多数解决方案都需要很少的资源来一次处理一个请求。但是,在某些情况下,这种性能很重要。

某些应用程序状态的可执行文件仅在其中编译和加载一次,因此磁盘延迟不会太多。使用.net或Java开发,只需按下执行按钮,等待一分钟,然后您的应用程序就可以进行测试了,所有已编译的源代码或多或少都在RAM中,而您不需要读取硬盘。

相反,对于PHP或Python应用程序,则有所不同。由于它们没有任何应用程序状态,因此每个请求都是独立解释的,因此您需要每次扫描并加载所需的所有文件。这意味着要读取大量文件,因此您的等待时间将乘以大量文件。

对于此系统,在Windows上使用卷映射非常昂贵,并且会降低性能。您可以使用安装到Linux OS的卷,但是在这种情况下,您将无法从Windows UI进行编辑。

因此,在大多数情况下,我们接受了最慢的性能(在大多数情况下,对于开发环境是可接受的),或者在其他情况下,我们被迫切换到Linux,这抵消了使用Docker具有多操作系统可用性的优势。

什么是WSL2

WSL(Linux的Windows子系统)是用于在Windows上本地运行Linux二进制可执行文件的兼容性层。 从Windows 10开始它就可以使用,并且可以在Windows内部使用Linux而不使用虚拟机。 自2019年6月以来,Windows 10随附了WSL(WSL 2)的增强功能。此更新通过一组优化的Hyper-V功能带来了许多性能改进。

简而言之,您现在在Windows机器中拥有Linux发行版比运行虚拟机更快。

好消息是Docker Desktop支持它,并且可以增强您的容器。

WSL2如何改变Docker

使用WLS2和Docker的结合,我们实际上跳过了一步。

Windows和Linux文件系统是相互共享的:您可以通过Windows访问共享驱动器\\WSL$ 来查看Linux,或者可以通过/mtn/ c来查看Windows。

docker容器使用Linux WSL,没有任何资源限制,并且具有更好的性能。

如何使用wsl命令,使用wsl2安装ubuntu

在这种情况下,有很多坏消息。 仍然可以共享Windows文件夹,但性能比标准情况下差。 这不是Java或.net中的问题,也不是可容忍的问题,但是使PHP开发不可行。

幸运的是,有一个解决方案将使用WSL2的好处与丰富的开发经验结合在一起。 实际上,Visual Studio Code可以在WSL2子系统上远程工作,因此您可以执行以下操作:

将卷保留在WSL2内,作为常规卷安装,以便获得最佳的文件系统访问性能。

照常在Windows上工作,在Linux上编辑代码。

很明显,如果您在IDE中双击一个项目或将其保存时要花更多的钱访问文件,这是一个非常可接受的解决方案。 问题与大量文件负载有关。

Visual Studio做得更好。 它具有一个扩展,可以与它们的远程子系统进行远程交互,因此您可以将UI保留在Windows中,但可以从Linux内部的实例使用引擎。 因此,作为开发人员的用户体验也很好。

如何使用wsl命令,使用wsl2安装ubuntu

好了,一旦我们了解了如何以及为什么可以提高Docker的性能,我们只需要遵循一些简单的步骤即可完成工作。

我们将需要执行几个步骤,但是,从更高的角度来看,我们必须:

  • 启用WSL2环境
  • 配置IDE并开始编码。

启用WSL2环境

本节说明如何安装WSL2版本,以准备开始使用Docker和WSL2进行编码。

启用WSL

第一步启用了Window子系统。 您必须在具有管理权限的命令行上运行它。

dism*ex.e** /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

启用WSL虚拟机

第二个命令激活虚拟机平台(是的,WSL仍然在后台使用hyper-v)。 如果您的PC尚未打开虚拟化功能,则可能需要通过BIOS进行设置。

dism*ex.e** /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

安装WSL2更新

安装和配置WSL2的最后一步是安装更新。 这是一个简单的MSI软件包,因此您可以*载下**并双击安装。

https://docs.microsoft.com/it-it/windows/wsl/install-win10

将WSL2设置为默认值

将版本2设置为所有子系统的默认设置。

wsl --set-default-version 2

从Microsoft市场安装ubuntu

要在子系统上运行Docker,我们需要*载下**Linux发行版。 由于Microsoft +开源现已成为现实,因此可以直接从Microsoft商店购买。 我使用了Ubunto,它只有440MB,所以不用担心会占用磁盘空间。

完成此步骤后,您将看到所有安装为子系统的操作系统。

wsl --list --verbose

您应该在WSL 2上看到docker,docker-data,ubuntu。

激活Docker WSL2扩展

在Docker Desktop内部,只需检查配置并启用WSL2功能。 可能需要重新启动docker或重新启动PC。

警告:从标准模式切换到WSL2时,您将需要重新*载下**所有映像(位于Hyper-v VM而不是WSL2内)。 此外,命名卷中的数据存储在VM中,因此您不会在新的WSL2计算机中找到它们。 因此,首先,从Docker容器提取并备份所有相关数据。 根据本地设置,您可能会丢失数据。

选中“使用基于WSL2的引擎”

如何使用wsl命令,使用wsl2安装ubuntu

然后,您解锁WSL集成面板,您可以在其中激活Ubuntu发行版。

如何使用wsl命令,使用wsl2安装ubuntu

安装VsCode扩展

最后一步是安装和*载下**Visual Studio插件。 通常,您可以通过单击网站上的安装或通过Visual Studio Code UI来执行此操作。

如何使用wsl命令,使用wsl2安装ubuntu

插件地址: https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl

WSL2使用

此时,所有步骤都完成了,您可以开始编码了。

对于开始编码,您有两个选择:从WSL或Windwsow开始。

就个人而言,我喜欢第二个,因为它非常独立。

1.命令行:

1.打开WSL终端或在shell中输入命令“ WSL”。 由于Ubunto是首选的子系统,因此您将位于其中。

2.输入“code .”。 这将在Windows计算机上打开Visual Studio Code。(如果不起作用,需要先将vscode 安装目录下的bin文件夹加入linux系统变量)

2.UI

1.打开Visual Studio代码。

2.单击WSL框(左下角,底部工具栏中的绿色按钮)或F1 + Remore WLS +新窗口

如何使用wsl命令,使用wsl2安装ubuntu

3.新窗口与Linux OS连接

从那一刻起,您就可以使用Visual Studio Code来完成所需的一切。 实际上,您可以从文件树中打开一个终端。 终端将位于WSL机器内部,如果您运行docker-compose up,您将在主机docker系统上激活容器。 您还可以使用git工具来处理提交。

由于许多原因,许多开发人员正在使用Windows作为开发环境。与Linux相比,这是获得最佳程序兼容性或更好的用户体验的常见选择。其他人正在使用Windows来获得比Mackbook便宜的笔记本电脑。

Docker在所有OS系统上都具有相同的开发经验,但在某些情况下可能会导致Windows上的性能问题。

WSL2可以提高性能,但是需要注意将文件放置在何处以及如何创建卷。

完成这些步骤后,您便可以享受与Linux相同的性能,并获得舒适的Windows用户体验。