使用容器从本地开发转向远程开发
2022 年 4 月 4 日,作者:Olivia Guzzardo,@OliviaGuzzardo
行业专业人士最喜欢问有抱负的开发者的问题之一是:“平均每个开发者每天编写多少行代码?”大多数人会猜数百或数千行——当他们听到实际平均数字在几十行时,总是感到震惊。
那么,开发者把其余时间都用在做什么呢?当然,有时间花在代码设计和搜索“如何在 CSS 中让 div 居中”等重要任务上,但大部分时间都花在了纯粹的开销上——设置项目、培训其他开发者以及解决在你自己的机器上无法重现的问题。
多年来,Visual Studio Code 团队一直将这一洞察力作为其研究的核心:如果我们能减少花在开销上的时间,例如阅读有关环境设置的资料,那么我们就能增加生产力时间。我们的愿景是让开发者不必一次又一次地重复解决相同的问题。这意味着一个一致的开发设置,能够应对版本升级、配置更改和硬件更新的永无止境的循环。
但是,实现这一目标的路径是怎样的呢?让我们审视一下提升开发者生产力的历程,它将我们从本地开发带到了基于容器的开发,最终走向了云端。
从本地开发开始
让我们从所有开发者起步(并且许多人仍在)的地方开始:本地开发。如果你曾说过“但在我的电脑上能用!”这句话,那么你很可能处于本地开发阶段。这意味着你的开发环境所需的一切都本地存在于你的机器上。
让我们描绘一下真实世界中本地开发的样子。你是否曾加入一个新项目,准备好投入工作并开始编码,但却收到了一堆入职文档,只为让你的环境运行起来。你花费数小时等待安装命令完成,并在同事之间来回寻求帮助,以解决构建失败问题。你可能需要数天才能成功运行该项目。
然后,一旦你度过了入职的难关,你的团队就需要更新项目的某个依赖版本。于是你不得不在你的笔记本电脑上安装更新版本,测试更新,并提交任何重构更新。但你的笔记本电脑运行的是 Windows,而你的队友运行的是 macOS,更改在他们的环境中不生效,你还有更多的故障排除工作要做。
然后,你还需要确保所有更新在生产环境中也能正常工作……
显然,当所有内容都仅存在于开发者的机器上时,这是个问题。你的机器可能与队友的机器大相径庭,无论是安装的依赖版本,还是运行完全不同的操作系统。这可能导致永无止境的配置噩梦。即使你让所有内容与同事保持同步,你也会失去在部署代码时不会遇到更多问题的信心。
如果能确信你的开发环境与包括部署环境在内的所有其他环境都相同,那不是很好吗?这引出了我们简化开发生产力的第一个进步:基于容器的开发。
容器无处不在
“容器”在行业中已经是一个热门词汇有一段时间了,所以让我们深入探讨一下容器究竟是什么。要理解容器的本质,将其与现实世界中的海运集装箱进行比较会有所帮助。
从简单的角度来看,物理海运集装箱允许货物保持为一个整体。所有需要运往公司 A 的货物都在海运集装箱 A 中。抵达后,公司 A 不需要再去联系集装箱 B 和集装箱 C 来获取完整的包裹;所有东西都打包在集装箱 A 中。此外,公司不需要单独的基础设施来处理,例如,一个装满家具的集装箱与一个装满食物的集装箱。无论内容是什么,他们都有必要的工具来提取该集装箱并将其运送到目的地。这提供了一种高效、标准化的产品运输方式。
容器首次出现在虚拟世界,正是为了获得同样的好处:一种简化产品交付的方式。它们提供了一种将你的软件作为一个整体交付的方式,包括所有二进制文件、依赖项和配置文件。这减少了配置开销所花费的时间,因为容器打包了软件运行所需的一切。然后,该容器可以轻松地在不同环境之间部署。据预测,到 2023 年,全球超过 75% 的组织将在生产环境中运行容器化应用程序,高于 2020 年的不到 30%。
传统上,容器用于代码准备部署到生产环境时。虽然这种模式确实简化了软件开发生命周期的末端,但对于开发者实际编写和测试代码时并没有太大帮助。为了弥补这一空白,基于容器的开发应运而生。
开发者的容器
基于容器的开发理念是在开发过程的最初阶段就引入容器。然后,开发者可以在与生产环境等其他环境一致的环境中进行所有编码和测试。当环境之间存在一致性时,解决不同代码行为在不同环境之间出现的问题所花费的时间就可以基本消除。
这引出了开发容器的概念:一个运行功能齐全的开发环境的容器。开发容器包含自己的应用程序和依赖项,例如所需的工具、库和运行时。在下图中,你可以看到这些依赖项存在于容器中而非主机上,这意味着你可以在眨眼间无缝切换不同的技术栈。
为了提供创建和连接开发容器的方法,VS Code 于 2019 年发布了 Dev Containers 扩展。该扩展通过充分利用开发容器的强大功能来增强本地开发体验,同时让你无需离开 VS Code 的舒适环境。该扩展的安装量超过 1100 万次,这让我们开始思考:如果能有一个托管在云端的开发容器,那会怎样?
迈向云端
说实话:一切都在向云端迁移,那么你的开发环境为什么会有所不同呢?首先,云容易受到攻击。其次,我们似乎不断听到大规模中断的消息。第三,它可能很昂贵。第四……等等,云不是应该是一件好事吗?
考虑到所有这些对云保持警惕的理由,想到我们如此重要的开发环境托管在那里可能会让人感到不适。那么,让我们保持舒适吧!让我们继续依赖我们那台 6 年的旧笔记本电脑,如果你尝试打开电子邮件过快,它就会发出非常奇怪的嗡嗡声,更不用说尝试构建项目了。我们只是舒适地等待不可避免的笔记本电脑崩溃,然后一旦我们有了新笔记本电脑,我们又不得不重建我们的开发环境,并努力记住我们是如何配置的。
结果发现,待在舒适区似乎也没那么美好。
虽然云本身存在固有的风险,但如果你明智地选择云托管服务,这些风险是可以缓解的——我们稍后会详细讨论。随着这些担忧的缓解,你将能享受到云的一些主要优势:可扩展性、更快的性能和更简单的维护,这只是其中的几个例子。
在云端托管让你能够访问另一台机器的资源,这些资源可以快速启动并在任何地方使用。将其与基于容器的开发优势结合起来,开发者可以在眨眼间投入编码。
云端容器
在云端运行容器并非新概念;事实上,一项研究表明,至少一半的容器在云端运行。基本的基础设施包括将容器部署到云托管的虚拟机上。我们可以将我们的开发容器部署到云端,以提供一个云托管的开发环境。
VS Code 在此领域的进入得益于对 GitHub Codespaces 的支持。在几分钟内,你就可以创建并配置一个托管在云端的开发容器,随时可以使用。然后,你可以通过 VS Code(无论是在浏览器还是桌面版中)连接到一个为你完全管理的开发环境,不再依赖你笔记本电脑的资源来应对需求。
Dev Containers 扩展中使用的相同开发容器可以在 GitHub Codespaces 中使用,从而实现向云端的无缝过渡。
但还记得云端所有那些可怕的可能性吗?嗯,GitHub Codespaces 通过利用 GitHub 的云功能来缓解这些问题。Codespaces 运行在 GitHub.com 上托管的计算选项中,该功能目前可供使用 GitHub Team 或 GitHub Enterprise Cloud 的开发者使用。
GitHub 按用户计费,因此你永远不会为你实际使用的量支付额外费用。你还可以设置支出限制,消除任何意外开销。此外,GitHub 可以提供 99.9% 月度运行时间的 SLA(服务水平协议),并且提供 GitHub Advanced Security 以缓解任何安全担忧。
借助 VS Code、GitHub 和开发容器的强大功能,GitHub Codespaces 提供了一条从本地开发转向云端的清晰路径。
下一步是什么?
作为开发者,我们希望花更多时间开发软件,减少耗时且令人头疼的配置。行业趋势可以也应该被用来赋能开发者,提升他们的生产力。我们已经探讨了容器和云计算如何将我们带到新的高度,你可以开始使用开发容器来亲身体验。那么,你认为下一步能让我们的生活更轻松的是什么呢?
祝您编码愉快!
Olivia Guzzardo,@OliviaGuzzardo