长久以来,.NET开发人员都会记得该框架在2001年的早期发布,当时微软向社区发布了第一个测试版。在这20多年中,.NET生态系统发生了很多变化,最引人注目的是云和分布式编程的兴起。云带来了.NET开发人员从未有过的各种技术堆栈,将.NET开发从以Windows为中心的开发平台转移到了通晓多种语言的发电站。
我们的开发环境变得更加强大,我们的生产环境似乎具有无限的规模,唯一的限制因素是我们的预算和时间。作为开发人员,我们希望我们的开发体验是流畅和高效的,并确信一旦我们的应用程序部署到生产环境中,我们的用户将获得尽可能好的体验。开发、预算和时间限制之间的平衡行为可能会使开发人员很难确定决策的优先顺序。
对于开发人员来说,幸运的是,DevOps的兴起将云(至少是它的一些变体)带到了我们本地的开发环境中,其核心宗旨是:
如果我们可以在整个开发、测试和试运行过程中运行类似于生产的环境,那么我们的应用程序成功运行的机会将会增加。
在我们进入细节之前,让我们先定义一下分布式系统的含义。围绕分布式系统的对话通常围绕诸如微服务、面向服务的体系结构、消息总线等流行语展开。事实是,如今许多.NET应用程序必须在应用程序域之外进行至少一次网络调用,无论是对数据库、Web服务、网络共享还是其他网络绑定依赖项。
在包容性定义中,大多数开发人员都在分布式系统上工作,无论我们是选择了整体式架构还是将我们的业务逻辑分解为微服务。问题不应该是我们是否使用分布式应用程序,而是我们的应用程序的分布式程度如何?
不管我们的开发方法是什么,我们都可以使用Docker和Containerization来增强我们的开发体验。我们将在下一节讨论这些术语的含义。
从高层次来看,开发人员希望从他们的技术选择中获得以下属性:
- Performant 性能:在我们的开发环境中运行生产工作负载或在本地工作时,性能几乎没有影响。
- Reproducibility 可再现性:我们构建的应用程序具有可预测且一致的配置和拓扑,理想情况下是通过我们可以在源代码控制中管理的描述性介质。
- Flexibility 灵活性:能够修改我们的应用程序拓扑,以满足问题领域的当前和未来需求,无论是在开发、测试还是生产工作负载期间。
- Observability 可观察性:了解有关我们的分布式应用程序及其依赖关系的关键信息有助于诊断和解决编程问题。
在我们阅读本教程的过程中,我们将讨论这些因素中的每一个,以及容器化和Docker如何帮助.NET开发人员实现他们想要的目标。
综上所述,大多数开发人员使用分布式系统,可以从容器化中获益。Docker是一个多用途的工具,.NET开发人员可以使用它来增强他们的开发时间体验,提供更一致的质量保证测试环境,并自信地交付一个让用户满意的生产环境。应用程序的容器化是一种工具,与所有工具一样,开发人员需要决定在哪里应用他们的知识。
在本教程结束时,我们可以决定是否要做任何与容器有关的事情,是全力以赴,还是有选择地将其应用到我们的开发过程中。