为了实现这一目标,我们花了很多时间与微软和苹果提供的软件栈一起工作。2016 年,我们引入了 Windows Linux 子系统 (WSL),此后,我们一直在密切关注,以便在产品中更好得利用它。
最初,WSL 给人的印象是在努力模仿 Linux 内核上的 Windows,但是由于 Windows 和 Linux 之间存在的根本差异,很多东西无法做到与 Native Linux 相同实现,而这意味着它无法直接运行在 Docker 引擎和 Kubernetes WSL 内部。而 Docker Desktop 开发了一个使用 Hyper-V vm 和 LinuxKit 的替代解决方案,以实现用户期望的无缝集成。
刚刚,微软宣布了一个 WSL 2 的主要架构变化:他们没有使用仿真,而是提供了一个运行在轻量级 VM 中的真正的 Linux 内核。这种方法在架构上非常接近于我们今天使用的 LinuxKit 和 Hyper-V,但是比 Docker 更轻量级,并且能够与 Windows 更紧密地集成。Docker 守护进程在其上运行得很好,性能表现优异,在我们开发人员的机器上,从冷启动到在 WSL 2 中运行只需大约 2 秒。对此,我们感到很兴奋,也很高兴和大家宣布:我们正在开发 Docker Desktop for WSL 2 的新版本,并计划在 7 月份进行公开预览。它将使得 Docker 容器开发的体验更丰富,由于 WSL 2 适用于 Windows 10 家庭版,所以 Docker Desktop 也适用于 Windows 10 家庭版。
为了使 Docker Desktop 成为 Windows 上使用 Docker 的最佳方式,我们携手微软一起合作。微软提供了 WSL 2 的早期版本,以便评估这项技术是否适合我们的产品,同时进行一些反馈。我们使用了不同的方法构建原型,所以接下来想和大家分享一下我们未来的工作。
我们使用 WSL 2 集成包替换了当前使用的 Hyper-V VM。这个集成包提供与当前 Docker Desktop VM 相同的功能:Kubernetes 1-click setup、自动更新、透明 HTTP 代理配置、从 Windows 访问守护进程、透明绑定 Windows 文件挂载等等。
这个集成包包含了运行 Docker 和 Kubernetes 所需的服务器端组件,以及用于与 WSL 中组件交互的 CLI 工具。
使用 Docker Desktop 时,运行守护进程的 VM 是完全不透明的:您可以在 Windows 中与 Docker 和 Kubernetes API 交互,但是除了 Docker 容器或 Kubernetes pod 之外,不能在 VM 中运行任何东西。
使用 WSL 2 集成,仍然可以体验到与 Windows 的无缝集成,不过运行在 WSL 内部的 Linux 程序也可以做到这一点。这对于开发针对 Linux 环境的项目的开发者或者针对 Linux 定制的构建过程具有巨大的影响,他们不再需要同时维护 Linux 和 Windows 两套不同的构建脚本了。
例如,Docker 开发人员可以在 Windows 上使用 Linux Docker 守护程序,可以使用与 Linux 开发人员相同的工具和脚本集:
此外,WSL 的绑定挂载将支持 inotify 事件,并且具有与本地 Linux 机器几乎相同的 I/O 性能,通过 I/O-heavy toolchains 解决了 Docker Desktop 的痛点问题之一。Node.js、PHP 和其它 Web 开发工具也可以从这一特性中获益。
结合 Visual Studio Code “Remote to WSL”,Docker Desktop Linux workspaces 可以在 Windows 上的 IDE 运行完整的 Linux 工具链,以便在本地机器上构建容器。
针对 WSL 2,微软在性能和资源分配方面投入了大量的精力:VM 设置使用动态内存分配,并且可以在所有主机 CPU 上安排工作,在主机提供的内存范围内消耗所需内存,并与运行在主机上的 Win 32 进程协作。
Docker Desktop 利用这一点极大地提高了资源消耗,可以根据需要任意使用 CPU 或内存,并且一些 CPU/ 内存密集型的任务,运行速度要比之前快。
此外,冷启动之后,启动 WSL 2 发行版和 Docker 守护进程的时间也快得惊人,在我们的开发笔记本电脑上仅需 2 秒钟,而在当前版本的 Docker Desktop 上仅需 10 秒钟。如果我们将守护进程的启动推迟到第一次 API 调用,并在守护进程没有运行任何容器时自动停止它,就可以达到优化电池寿命的目的。
针对 Docker Desktop(尤其是在企业环境中),用户通常都会考虑这样一个问题,即 Windows 文件绑定挂载的可靠性。如果当前实现依赖于 Samba Windows 服务,那么它可能会被停用、被企业 GPOs 阻塞、被第三方防火墙阻塞等。
而使用 WSL 2 的 Docker Desktop 可以解决这个问题,通过 WSL 特性来实现 Windows 文件的绑定挂载,提供开箱即用的“IT Just Works”体验。
通过和微软的合作,我们编写了核心功能来部署集成包、运行守护进程并将其公开给 Windows 进程,支持绑定挂载和端口转发。
Docker Desktop for WSL 2 预览版将于 7 月开放下载,它将与 Docker Desktop 当前版本并行运行,用户仍可处理现有项目。
原文链接
https://engineering.docker.com/2019/06/docker-hearts-wsl-2/
活动推荐
QCon 全球软件开发大会(北京站)2019 已经圆满结束,QCon 上海 2019 即将起航,点击 「 阅读原文 」了解详情。大会 7 折早鸟票限时开售,现在报名立减 2640 元,团购可享更多优惠!有任何问题欢迎联系票务小姐姐 Ring ,电话:13269076283 微信:qcon-0410