繁体   English   中英

wsl2 上的 docker 非常慢

[英]docker on wsl2 very slow

看了wsl2上运行Docker的性能提升后,一直在等待支持wsl2的Windows 10正式发布。 我更新了 Windows 和 Docker 并打开 Docker 标志以使用 wsl2,并希望我的 Oracle 数据库在 Docker 容器中运行时有一些性能提升,但不幸的是,这种变化显着降低了容器和我的笔记本电脑的速度。 容器的性能大约慢了 10 倍,我的笔记本电脑在启动容器时几乎卡住了。 似乎 memory 消耗会完全用完我的 8GB 和大量 memory 交换开始发生。 我可以做些什么来提高 wsl2 上 Docker 的性能,或者至少更好地了解我的设置有什么问题?

我的环境:

  • 处理器 Intel(R) Core(TM) i7-2620M CPU @ 2.70GHz,2 核
  • 安装物理 Memory (RAM) 8.00 GB
  • 微软 Windows 10 专业版 10.0.19041 内部版本 19041
  • Docker 版本 19.03.8,构建 afacb8b

这来自“vmmem”,它消耗尽可能多的资源。 要解决问题只需 go 到您的用户文件中

C:\用户\用户名

在此目录中创建一个名为“ .wslconfig ”的文件,您将在其中配置可以消耗 WSL2 的资源数量:

[wsl2] 
memory=900MB    #Limits VM memory in WSL 2 to 900MB 
processors=1    #Makes the WSL 2 VM use one virtual processors

现在关闭您的 docker 并等待“vmmem”在任务管理器中关闭。

然后您可以重新启动 docker 并且通常“vmmem”不会超过您设置的限制(此处为 900MB)如果不起作用,请重新启动您的计算机。

希望对您有所帮助。

您可能将您的代码存储在 Windows 机器上类似于此的文件夹中......

C:\\Users\YourName\projects\blahfu

但是您在 WSL 2 上使用 Docker,这是一个不同的 (Linux) 文件系统。 因此,当您执行 Docker 构建时,所有代码/上下文都会从 Windows 文件系统复制到 Linux 文件系统,然后从那里复制到 Docker 容器。 这是最耗时的,而且速度非常慢。

尝试将您的项目放入这样的文件夹中......

/home/YouName/projects/blahfu

你应该得到相当大的性能提升。

wsl 容器具有与 windows 文件系统隔离的适当文件系统。 基本思想是将源代码从 windows 文件系统复制到 wsl 文件系统。

从 window 您可以访问 wsl 容器并将您的项目复制到 wslcontainer:

使用资源管理器导航到\\wsl$

从这个位置重建容器,这样就可以了!

如果实际 docker 容器的数据存储在 windows 文件系统(即 NTFS)上,而不是存储在本机 linux 文件系统上(不管 docker 容器内容是什么,很可能已经基于 linux),那么我认为你是将看到性能下降,因为您正在运行 WSL 并使用已安装的 WINDOWS 文件系统(即 /c/mnt/...)中的 docker 容器。

如果您将 docker 容器复制到 WSL 上的 /usr/local 或 /home//docker 之类的位置,那么您可能会看到 10 倍的性能提升。 尝试一下,看看它是否有效?

您需要编辑“vmmem”资源,只需在路径中添加 file.wslconfig

C:\Users<您的用户名>.wslconfig

使用 .wslconfig 配置全局选项

Available in Windows Build 19041 and later

您可以通过将 .wslconfig 文件放入用户文件夹的根目录来配置全局 WSL 选项:C:\Users<yourUserName>.wslconfig。 其中许多文件与 WSL 2 相关,请记住您可能需要运行

wsl--关机

关闭 WSL 2 VM,然后重新启动 WSL 实例以使这些更改生效。

这是一个 sample.wslconfig 文件:

安慰

Copy
[wsl2]
kernel=C:\\temp\\myCustomKernel
memory=4GB # Limits VM memory in WSL 2 to 4 GB
processors=2 # Makes the WSL 2 VM use two virtual processors

看到这个https://learn.microsoft.com/en-us/windows/wsl/wsl-config

如果您使用的是 VS Code,则有一个名为“远程容器:容器卷中的克隆存储库...”的命令可确保您拥有全速文件访问权限。

形成文档

存储库容器使用隔离的本地 Docker 卷,而不是绑定到本地文件系统。 除了不会污染您的文件树之外,本地卷还具有提高 Windows 和 macOS 性能的额外好处。

打开您的 wsl2 发行版(例如 Ubuntu)并设置 ~/.docker/config.json 文件。
只有你需要改变:

{
  "credsStore": "docker.exe"
}

“credsStore”:“desktop.exe”:超慢(超过 2 分钟)
“credsStore”:“wincred.exe”:快
“credsStore”:“”:快

它工作得很好。

在阅读了有关在 wsl2 上运行 Docker 时的性能改进后,我一直在等待支持 wsl2 的 Windows 10 的正式发布。 I updated Windows and Docker and switched on the Docker flag to use wsl2 and was hoping for some performance boost for my Oracle Database running in a Docker container but unfortunately the change slowed down the container and my laptop dramatically. 容器的性能大约慢了 10 倍,我的笔记本电脑在启动容器时几乎卡住了。 似乎 memory 消耗将完全用完我的 8GB,并且开始进行大量的 memory 交换。 我可以做些什么来提高 wsl2 上 Docker 的性能,或者至少更好地了解我的设置有什么问题?

我的环境:

  • 处理器 Intel(R) Core(TM) i7-2620M CPU @ 2.70GHz, 2 Core(s)
  • 安装物理 Memory (RAM) 8.00 GB
  • 微软 Windows 10 专业版 10.0.19041 Build 19041
  • Docker 版本 19.03.8,构建 afacb8b

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM