使用容器从本地开发转向远程开发
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% 的月度正常运行时间服务水平协议,并且提供 GitHub Advanced Security,以缓解任何安全顾虑。
凭借 VS Code、GitHub 和开发容器的力量,GitHub Codespaces 提供了一条清晰的路径,将本地开发迁移到云端。
下一步是什么?
作为开发人员,我们希望将更多时间用于开发软件,更少时间用于令人头疼的配置。行业趋势可以也应该被用来赋能开发人员,提高他们的生产力。我们已经探讨了容器和云如何将我们带到下一个层次,您可以开始使用 Dev Containers 亲身体验。现在,您认为下一步能让我们的生活更轻松的是什么呢?
编码愉快!
Olivia Guzzardo,@OliviaGuzzardo