Docker 网络设计哲学

Docker 1.71.9初始版本的实验网络中,Docker社区的反响一直都非常好!首先,我们要感谢所有的讨论,评价,优点和归档的问题。随着网络功能在每一个发布版本上的不断演变,我们想花一些时间来解释在设计背后的指导原则。


1.1     第一用户

Docker的理念是构建具有跨基础设施良好的用户体验和无缝的应用程序的可移植性工具。新功能总是不断地完善和迭代,以便使最终产品提供了最佳的用户体验。网络遵循同样的理念,我们反复几次为用户找到正确的抽象。当涉及到网络,有两种类型的用户:

  • 谁愿意来创建和部署Docker平台上的分布式应用程序栈的应用程序开发者

  • 谁配置和管理基础设施的网络IT团队

我们想把合适类型的工具给这两种类型的用户,让他们有权容易地实现自己的目标,你能够从Docker社区了解到一些使用经验,如.@arungupta@allingeek  @Yoanis_Gil

Docker的首要关注点是用户,无论他们是来自应用团队和IT运营。这也意味着:那些支持的用户体验和无缝的应用程序可移植性的相同架构目标的人即为生态系统的合作伙伴。考虑到这一点,这是我们的信念,即所有的APIUI必须暴露给最终用户以及任何其它的核心价值会接受妥协。任何在生态系统中的人声称支持或包括Docker必须坚持维护用户体验和可移植性,否则,那根本不是Docker



1.2    用户:开发者

尽可能多的应用程序开发人员都希望他们的应用程序能彼此沟通,大多数都不想了解或涉足其内部是如何真正地地实现细节的。事实上,他们甚至不想要知道他们的应用程序绑定的什么样的IP地址。应用程序开发者的关注,通常在他们的应用程序绑定到第4层服务层而已。

 

其中,Docker网络设计的指导原则之一就是缓解应用程序开发人员,让他们可以不用担心网络管道的细节。我们相信,隐藏网络连接和服务发现是怎样通过一个简单的APIUI实现繁杂的细节,我们可以使应用开发人员能够更自由地开发他们的分布式应用程序堆栈。我们应该消除连接/发现性头痛和可移植性的担忧,从单片应用程序转换为一组微服务的任务量阻碍到应用程序开发人员。我们希望开发商能够把自己的微服务通过使用一些简单的“网络创建”和“网络连接”命令绑定到一个分布式应用程序。

另外一个指导原则就是扩展Docker容器到网络同样是可移植的体验。无论在哪里运行,只要是使用相同的镜像,运行创建的Docker容器的镜像(image)表现效果一样。类似地,当应用程序开发人员定义自己的应用程序栈为一组分布式应用,它应该与工作在其任何基础设施上运行效果相同。这在很大程度上取决于我们显露出什么抽象显露给应用程序开发人员,更重要的是什么抽象,我们不露给应用程序开发人员。

 

这就是Docker“网”抽象(CNM)是如何诞生。它提供了应用程序开发者思考和推理其应用服务的连通性和可发现需要正确的参考,而不与这究竟是如何实现所有复杂构建机理而让他们分心。在某些方面,因为用户被允许说“什么”之类拓扑结构的应用需要,而不是告诉“如何”物理构建拓扑“网络”的抽象实现。

 


例如,一个典型的三层Web应用程序栈就是在一个网络中的Web服务器和应用服务器,然后,在相同的应用程序服务器连接到另一个有数据库服务器的网络里面。应用开发者不应该有怎样一个与物理网络,防火墙等实施烦恼,从应用中解耦基础设施能够显著地增加了分布式应用程序的可移植性。这也意味着开发人员在应用程序的拓扑结构定义上有更多的自由。


更多内容,请查看Docker Networking Design Philosophy(https://blog.docker.com/2016/03/docker-networking-design-philosophy/)



欢迎关注我的微信公众号 
weixing


阅读更多
换一批

没有更多推荐了,返回首页