闲聊云服务技术系列#2--Docker

昨天在第一篇的结尾,预告了今天的主题,那就是这几年容器虚拟化的明星Docker。能够说,在互联网技术圈里,已经很难找到没有据说过Docker的工程师;感受没将开发和测试环境经过Docker来部署,都很差意思给人家打招呼,更别说腾讯,京东,Weibo这些大厂早就将Docker大规模的运用在生产环境中了。因此,今天我会结合本身和Docker的故事来聊聊这项技术。
前端


初见Docker
linux


说以前,有个背景故事要交待一下:2014年末,我已经离开eBay, 加入顺丰,参与顺丰海淘的建设。那时候,正是项目大兴土木,百废待兴的阶段,那时候5-6个项目并行开发是屡见不鲜,同时,因为咱们从一开始就走的微服务路线,十几个Dubbo服务,前端,缓存,ZK等等,所有部署单例挤在一块儿,再怎么省,每搭一套环境也须要8-9台VM,算下来,仍是有必定的成本的。
docker

本着下降维护成本+节约做为出发点,团队里有两位运维的兄弟,就开始琢磨Docker,但愿引入Docker下降维护和机器的成本。实际上,我后续对Docker的入门,就是从他们两位身上学到的。:)缓存

简单来讲,Docker是一个Linux容器管理工具,Linux容器技术基于Linux内核提供的两个机制:Cgroups(实现资源按需分配)和Namespace(实现任务隔离)。微信


Container和VM的对比
架构


因为使用的技术彻底不一样,容器和虚拟机也有不少不一样的地方:
运维

相比于VM上部署的二进制文件,服务能够经过以docker镜像的方式交付,其部署很是轻量、快速,而且额外开销很低。作过VM镜像的朋友都知道,VM的镜像通常须要达到几个GB甚至10GB以上,而当咱们经过docker制做容器镜像的时候,发现镜像才几十MB;VM启动通常都要分钟级别,而启动容器只须要秒级。
分布式

因此二者最大的区别就是容器比虚拟机明显更轻量级,对宿主机操做系统而言,容器就跟一个进程差很少。所以容器有着更快的启动速度,更高密度的存储和使用、更方便的集群管理等优势。很重要的一点在于,在容器中运行应用和直接在宿主机上几乎没有性能损失,同时比虚拟机明显性能上有优点。微服务

最后,咱们将全部的测试环境所有作成了基于Docker的环境,而且作了一键部署新环境的脚本(当时感受真是很赞),惟一遗憾的是,因为时间缘由,当时咱们对Docker吃得还不透,好比容器内外服务通讯的坑,没有一个明确的解决方案,因此到最后也未敢将Docker引入到生产环境中。
工具


Container能彻底取代VM?


在我看来,这个问题的答案是否认的。

首先,容器最近几年才真正兴起,配套技术和标准还在完善中。而虚拟机技术已经发展了不少年了,虚拟机和虚拟化层间的接口、虚拟机镜像格式等都已经标准化了,相应的管理工具、分布式集群管理工具都有比较完善的解决方案,

其次,如前文所说,docker的隔离技术主要基于linux内核namespace和cgroup这2个功能,但里面还有不少隔离不完善的地方,如/proc、/dev设备、内核模块、syslog等信息并无包含在namespace之中,决定了同宿主上的docker不能提供给多个用户同时使用。

最后,虚拟机因为有自身的OS存在,能够和宿主机运行不一样OS,而容器只能支持和宿主机内核相同的操做系统。并且虚拟机因为有VMM的存在,虚拟机之间、虚拟机和宿主机之间隔离性很好,而容器之间公用宿主机的内核,共享系统调用和一些底层的库,隔离性相对较差。

因此,在SaaS和PaaS领域里,以Docker为表明的Container能表现出明显的优点,但在IaaS领域,VM的地位目前是没法撼动的。


下篇预告


Docker 实现了建立和管理容器,但在现实项目落地的过程当中,还远远不够,咱们还须要一个容器集群的管理平台,搭建PaaS平台。在这个关键时刻,怎么能少到了互联网技术圣殿Google的身影呢?Kubernetes的推出,也进一步推动了容器技术的发展。接下来,咱们就来聊聊容器集群的大脑Kubernetes。

扫描二维码或手动搜索微信公众号【架构栈】: ForestNotes

欢迎转载,带上如下二维码便可

相关文章
相关标签/搜索