使用容器从本地开发转向远程开发
业内人士最喜欢问有抱负的开发人员的一件事是:"开发人员平均每天写多少行代码?"大多数人猜测是几百或几千行--当他们听到实际的平均数字是几十行时,总是感到很震惊。
那么,开发人员在剩下的时间里都在做什么呢?当然,有一些时间花在重要的任务上,如代码设计和搜索 "如何在CSS中把一个div放在中心",但有相当多的时间花在纯粹的开销上--建立项目,加入其他开发者,以及排除那些你在自己的机器上似乎无法重现的问题。
Visual Studio Code团队多年来一直将这一见解作为研究的核心:如果我们能减少花在开销上的时间,比如阅读环境设置,那么我们就能增加生产力时间。我们的愿景是,开发人员不必不断地重复进行同样的战斗。这意味着一个一致的开发设置,可以处理版本升级、配置变化和硬件刷新的无休止冲突。
但是,让我们达到这一目标的道路是什么样子的呢?让我们来看看提高开发人员生产力的历程,它带领我们从本地开发,到基于容器的开发,再到云。
从本地开发开始
让我们从所有开发人员的起点开始(很多人仍然在那里):本地开发。如果你曾经说过这样一句话:"但它在我的电脑上能用!",那么你很有可能处于本地开发阶段。这意味着你的开发环境的一切都存在于你的机器上:

让我们描绘一下本地开发在现实世界中的样子。你是否曾经加入一个新的项目,准备开始工作并开始编码,但却被交给几页的入职说明,以便让你的环境启动和运行。你花了好几个小时来等待安装命令的完成,并在同事之间跳来跳去以解决构建失败的问题。在你能成功运行项目之前,可能要花好几天时间。
一旦你克服了入职的困难,你的团队需要更新项目的一个依赖版本。因此,你必须在你的笔记本电脑上安装更新的版本,测试更新,并推送任何重构更新。但是你的笔记本运行的是Windows,而你的队友运行的是macOS,而这些变化在他们的环境中并不奏效,而你还有更多的问题需要解决。
然后,你还需要确保所有的更新在生产中也能运行......

很明显,当所有的东西都只存在于开发者的机器上时,这是有问题的。你的机器可能与你的队友的机器有很大的不同,无论是从安装的依赖版本,还是从运行一个完全不同的操作系统。这可能会导致一个永无止境的配置噩梦的循环。即使你把一切都与你的同事同步,你也会失去信心,当你去部署你的代码时,你不会遇到更多问题。
如果能确信你的开发环境和其他人的环境包括部署环境是一样的,那不是很好吗?这给我们带来了简化开发效率的第一个进步:基于容器的开发。
容器无处不在
"容器 "已经成为行业中的一个大热门词汇,所以让我们深入了解一下容器到底是什么。为了理解容器的本质,看一下与物理世界中的运输容器的比较会有所帮助。
在一个简单的观点中,物理运输集装箱允许货物作为一个单元停留。所有需要运往A公司的东西都在航运集装箱A中。到达后,A公司不需要联系集装箱B和集装箱C来获得他们的完整包装;所有东西都在集装箱A中包装好了。无论内容如何,他们都有必要的工具来提取该集装箱并将其带到目的地。这提供了一种高效、标准化的产品运输方式。
集装箱最早出现在虚拟世界,也是为了这个好处:以精简的方式运输产品。它们提供了一种将你的软件作为一个单元来运输的方式,包括所有的二进制文件、依赖性文件和配置文件。这减少了花在配置开销上的时间,因为容器打包了软件运行所需的一切。然后,该容器可以很容易地从一个环境部署到另一个环境。据预测,到2023年,超过75%的全球组织将在生产中运行容器化的应用程序,而2020年还不到30%。
传统上,容器是在代码准备部署到生产中时使用的。虽然这种模式无疑简化了软件开发生命周期的末端,但在开发人员实际编写和测试代码时,它并没有为他们做什么。为了填补这一空白,基于容器的开发出现了。
面向开发者的容器
基于容器的开发背后的想法是在开发过程的最开始就引入容器。然后,开发人员可以在与其他环境(如生产环境)一致的环境中进行所有编码和测试。当不同环境之间存在一致性时,在一个环境和另一个环境之间对不同的代码行为进行排查的时间就可以基本消除。
这给我们带来了开发容器的概念:一个运行全功能开发环境的容器。一个开发容器容纳它自己的应用程序和依赖性,如所需的工具、库和运行时间。在下图中,你可以看到这些依赖性存在于容器中,而不是在主机上,这意味着你可以在短时间内无缝切换技术堆栈。

为了提供一种创建和连接到开发容器的方法,VS Code在2019年发布了远程-容器扩展。这个扩展通过使用开发容器的全部功能来增强本地开发,同时永远不会离开舒适的VS Code。随着该扩展的安装量超过1100万,它让我们思考:如果你能拥有一个托管在云端的开发容器,会怎么样?
迁移到云端
让我们现实一点:所有的东西都在向云端转移,那么为什么你的开发环境应该有什么不同?嗯,首先,云很容易受到攻击。第二,我们似乎不断听到关于重大故障的消息。第三,它可能是昂贵的。第四......等等,云不是应该是个好东西吗?
有了所有这些对云持谨慎态度的理由,想想像我们的开发环境这样重要的东西被托管在那里,可能会让人感到不舒服。所以,让我们保持舒适的状态吧!让我们继续依靠我们的6岁的笔记本电脑,如果你试图快速打开一封电子邮件,它会发出非常奇怪的呼呼声,更不用说试图建立一个项目。我们就舒舒服服地等着不可避免的笔记本崩溃,然后一旦我们拿到新的笔记本,我们就必须重建我们的开发环境,并试图记住我们是如何配置的。
事实证明,呆在我们的舒适区听起来也不是那么令人愉快。
虽然云有固有的风险,但如果你明智地选择你的云主机服务,这些风险是可以减轻的--我们很快会谈论更多。随着这些问题的缓解,你将获得云的一些主要好处:可扩展性、更快的性能和更容易的维护,仅举几例。
在云中托管,你可以访问另一台机器的资源,然后可以快速启动并在任何地方使用。结合基于容器的开发的好处,开发人员可以在一眨眼的时间内启动和编码。
云中的容器
在云中运行容器并不是一个新概念;事实上,一项研究表明,至少有一半的容器是在云中运行的。基本的基础设施包括将容器部署到云托管的虚拟机上。我们可以将我们的开发容器部署到云中,以提供一个云托管的开发环境。
VS Code在这个领域的进入来自于对GitHub Codespaces的支持。在几分钟内,你可以创建和配置一个托管在云端的开发容器,只要你需要它,就可以随时准备好。然后你可以通过VS Code(在浏览器或桌面)连接到一个完全为你管理的开发环境,不再依赖你的笔记本电脑的资源来处理需求。

远程-容器扩展中使用的开发容器也可以在GitHub代码空间中使用,提供了向云的无缝过渡。
但还记得所有那些可怕的云的可能性吗?好吧,GitHub Codespaces通过利用GitHub的云功能缓解了这些问题。Codespaces在GitHub.com上托管的计算选项上运行,该功能目前适用于使用GitHub Team或GitHub Enterprise Cloud的开发者。
GitHub以每个用户为基础进行收费,所以你的费用永远不会超过你的使用量。你还可以设置一个支出限额,摆脱任何意外支出。此外,GitHub可以提供每月99.9%的正常运行时间的服务水平协议,而且GitHub高级安全服务可以缓解任何安全问题。
借助VS Code、GitHub和开发容器的力量,GitHub Codespaces为从本地开发转向云计算提供了一条清晰的道路。
下一步是什么?
作为开发者,我们希望把更多的时间花在开发软件上,而不是花在让人头痛的配置上。业界的趋势可以而且应该用来增强开发人员的能力,以提高他们的生产力。我们已经探讨了容器和云是如何把我们带到下一个层次的,你可以从远程 - 容器扩展开始,自己看看。现在,你认为让我们的生活更轻松的下一步会是什么?
编码愉快!