Docker,改变程序世界的箱子

  • 来源:36kr
  •  2016-01-16
  •   浏览 850 次

Docker,改变程序世界的箱子

本文来自微信公众号“给产品经理讲技术”(pm_teacher),欢迎大家关注。

最近听了一期罗辑思维,聊的是《改变世界的箱子》,这个箱子就是集装箱,它将物流运输过程标准化为以一个箱子为单元,简化了运输流程,同时也降低了物流成本,因而造就了一个高度自动化、标准化和低成本的物流体系,极大的促进了经济全球化。这让我想到,最近在程序界也出现了同样的一个箱子,那就是今天要聊的 Docker 容器。

软件开发中需要面对的一个挑战就是环境管理问题,因为软件并不是独立运行的,它依赖了很多其它的软件,包括操作系统、运行时、依赖库等等,而且对每个依赖软件还有版本要求,有一个依赖关系稍微不对,那就可能造成软件的运行异常。产品同学应该有过这种经历,从开发哥那里要一个最新版的软件来体验功能,结果装在自己的电脑上打开就挂掉,这个时候找开发哥来解决,开发哥一看就会说 “哦,你这环境不对,换个 Win8 吧,这软件只能在 Win8 以上运行”,或者说 “这个软件需要.Net 框架,你装个.Net 就好了”。

其实解决依赖环境的办法很简单,那就是所有机器都用同一套环境。但是对于一些 web 服务,它所依赖的软件及关联软件可能有上百个,让你去配一台机器已经要吐血了,如果让你把这个服务发布到 100 台不同的机器上,那么你就应该会阵亡了。同时,很有可能因为不同的机器已有的环境不同,你安装这些依赖的同时还要保证不能影响其它已有应用。

说了这么多,其实就是三个大问题,如何解决环境依赖?如何解决大规模部署?如何解决应用与应用的互相影响?Docker 就是这些问题的一种解决方案,它是一个容器,也可以说是一个软件集装箱,这个箱子里面可以塞入特定版本的操作系统、数据库、服务器程序和 web 应用,这样一套完整的 web 服务就集成在这个箱子里面了,当要发布服务的时候,直接将这个集装箱放在我们的服务器船上。如果你想发布到 100 台机器上,没问题,只需要 ctrl-c ctrl-v,将这些集装箱复制到 100 台机器上,它不会在乎船的配置高低,只要能放得下就行。如果你想发布 10 个不同的服务,还是没问题,你只需将这 10 个不同的集装箱依次排列在服务器船上,它们之间完全不会互相影响,因为各自被锁在不同的箱子里。

有的同学可能会说了,这不就是虚拟机嘛...是的,Docker 算是一种轻量级的虚拟机,它比起传统的虚拟机更快,更节省资源。打个比方,虚拟机就是轮船上的豪华包间,即使它用不了这么多资源,它也霸占着不让别人使用,而 Docker 容器就是一个简单的集装箱,它只占据它需要的资源。

Docker 技术目前才刚刚开始流行,它能不能改变程序世界,让我们拭目以待吧。

To Top