

Windows 10 Docker 基于 WSL 2 时读写性能的坑
source link: https://www.mokeyjay.com/archives/2970
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.


Windows 10 Docker 基于 WSL 2 时读写性能的坑
首先到 Docker 官网下载一个 Docker Desktop Windows 安装包
https://www.docker.com/get-started
这有官方的安装教程 https://docs.docker.com/docker-for-windows/install/
安装过程中你会发现它一直在引导你启用 WSL 2,并表示基于 WSL 2 的 Docker 相比基于 Hyper-V 而言拥有各种各样的好处
就连微软官方也在 WSL 2 文档中强调 WSL 2 拥有更好的文件性能等等
那既然两个官方都这么说了,那就启用吧。启用完毕后,根据自己的需求部署了 php 和 nginx 容器,准备作为本地开发环境,将 Windows 下的代码目录挂载到容器中,试着访问了一下项目
吃惊地发现原本几百 ms 就能执行完的代码,现在竟要好几秒钟
这还是在代码已经放到 SSD 里的情况下。如果是在 HDD 里甚至一度逼近 8s
经过几个小时的苦苦排障,最后找到了微软官方的这篇文档《比较 WSL 1 和 WSL 2》
我们直接看最后一行,可以看到,WSL 1 的跨 OS 文件性能是要好于 WSL 2 的
好家伙,感情之前说 WSL 2 更好的文件性能是指不跨 OS 的情况下?
又是一番搜索,看了看 WSL 项目 下的几个 issues(具体链接找不到了),大致都是说由于 Windows 和 Linux 的跨系统文件兼容性问题无法得到很好的解决,WSL 2 下访问 Windows 文件性能会非常差
于是,我关闭了 Use the WSL 2 based engine,重启 Docker,此时自动切换到基于 Hyper-V 的模式。再次启动相关容器,尝试访问项目
速度一下子就恢复到可以忍受的范围了,性能竟相差 8 倍有多
也就是说,如果你也像我一样在 Windows 中写代码又在 docker 中运行的话,要么放弃使用 WSL 2,要么忍受龟速文件 IO。好在日常 PHP 的开发并不依赖 WSL 2 的各种完整 Linux 特性
这时可能有人会想到,我把代码文件放在 WSL 2 中挂载到容器里不就没有性能问题了吗?至于 Windows 下如何开发,用 IDE 打开 \\wsl$\
不就行了吗?
这个办法我已经尝试过了。虽然文件都在本地,但由于 WSL 2 虚拟磁盘的原因,\\wsl$\
依然走的是 SMB 协议,不仅性能稀烂,而且 IDE 无法获取到文件变更的事件。具体来说就是你 composer 随便依赖一个包,IDE 可能十几二十分钟都缓不过来。这同样是我无法忍受的
但如果你日常开发中使用 VSCode,那么一切又变得简单起来。只要把代码放在 WSL 2 系统中即可解决。至于 Windows 下如何开发,安装一个 Remote – WSL 插件即可。Docker 的官方文档《Develop with Docker and WSL 2》中也有提到这一点
我尝试过这个插件,真的是非常舒服,是真正的云开发。不像 JetBrains 家 IDEs 里所谓的 remote,本质上只是个自动上传的功能而已
Recommend
-
12
Introduction In 2016, Microsoft launched Windows Subsystem for Linux (WSL) which brought robust unix functionality to Windo...
-
6
Windows Subsystem for Linux Installation Guide for Windows 10 09/15/2020 10 minutes to read In this article There are two options available for install...
-
14
windows 10更改WSL Docker镜像目录 现在Docker Desktop默认使用WSL 2来运行,而不是...
-
8
摄影:产品经理 产品经理的酒店早餐 有些同学使用 Windows 或者 macOS 系统,但需...
-
19
Seamless integration of Docker on Windows using WSL 2? In this post I give a short summary of using Docker on Windows and a more detailed view into the newest Docker Desktop version in combination with WSL 2. If...
-
12
1. Docker介绍 Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程...
-
8
基于 Fluent Terminal 和 WSL 的 Windows 命令行工具 · 2020-08-27 · ...
-
4
70%读写性能提升!基于UCloud对象存储US3的用户态文件系统设计为了解决在数据备份场景中的可靠性、容量、成本问题,越来越多的用户倾向于使用对象存储来进行备份。然而,有些场景下通过对象存储US3来备份还是不够方便,甚至不适用。比如在数据库备份场...
-
6
Background My laptop has only 147 GB of space and run Windows 10 as my C Drive. Now any developer who uses many software as part of their development process would agree that this space is grossly inadequate. I had...
-
47
WSL 2 GPU Support for Docker Desktop on NVIDIA GPUs Frédéric Dalleau De...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK