云、容器、镜像,都是什么概念?

Dec 13, 2016


追影技术·第二章:云时代的小型APP(一)

云、容器、镜像,都是什么概念?

  容器这个概念出来几年,现在是越来越火了。容器的那些特性一提就令人感到excited——带依赖环境的打包,部署到各种Linux上都能良好运行,快速构建的特性…这些看起来很高很赛艇,能够大大减轻苦逼程序员工作的特性令每一个开发者都跃跃欲试。但在尝试这些新技术之前,一件必须要做的事情是理解这些新技术。

  关于“理解”二字的理解,我要念两句诗,叫做“横看成岭侧成峰,远近高低各不同”,网上有人说了,像云、容器、微服务这些概念,是一解释就懂,一问就懵,一讨论就打架。为什么呢?一个人的技术水平有高低,面对的需求也有很大差异,开始学习一门新技术的时间也有不同,这些都会影响对新技术的理解。那怎么样理解新技术才算正确呢?

  其实我也不是一个长者,见得不多,带的团队也很young很simple。我是觉得最适合自己的就是最好的,对新技术的理解不要钻牛角尖,只要做到基本概念上尽量没有误区,再结合自己面临的业务需求去理解,然后尽量加以利用实现自己想要的功能。那么现在,项目组面临服务端的全面重构,我对容器的理解是怎样的呢,听我详细道来:

  自云时代以降,日新月异不断发展的虚拟化技术让人眼花缭乱,其实这都是错觉。让人眼花缭乱的不是新技术,而是各大厂商为了抢占先机对新技术的宣传,概念玩多了就把人玩懵了。比方说云技术,其实就是虚拟化,虚拟化技术早就有了,大家一定听说过虚拟主机(VPS)吧,现在我们的云主机就是虚拟主机发展来的。虚拟化的技术进步了,之前操作虚拟主机,是给用户分配共享的服务器,各自划分好空间,各自用自己的账户登录,现在大家用云服务器,暴露给用户的只有个接口,用户只知道通过这个接口能够访问自己的资源,并不知道里面是哪台服务器、和几个人共享,此为一虚;用户只能查看自己云主机的系统状态,并不知道宿主机什么情况,而且自己云主机当然是虚拟的,此为二虚。这就是我理解的云。

下图是阿里给出的虚拟主机与云服务器对比

图片1

  云是虚拟化,容器也是虚拟化,只不过容器虚拟化的层次更高了,属于操作系统级别的虚拟化。你如果在操作系统里装了dockerEngine,就有了一个隔离的环境,这时操作系统内核都拥有彼此隔离和分割的空间,每个隔离的空间就是“容器”。所以,我们在容器里操作,就相当于在又一个操作系统里一样了。容器的打包单位是镜像,制作镜像的时候我们可以把程序运行的各种依赖一起打包进去,这样做好的镜像本身就是一套完整的运行环境。容器发布之后,由于一整套环境都在里面我们可以方便地把它搬来搬去,搬到各种Linux服务器上,还可以给它调配资源。以上就是对文章开篇提到的容器特性的解释了。我觉得容器技术未来是大有可为的,人都懒啊,谁不喜欢这种标准化自动化的工具呢?想一想,未来生产代码就像工厂流水线生产产品一样,严格按规定配置和版本组装好的容器自动化地部署到需要的地方,在也不用苦逼的到处配环境了,excited?

下图可以说明容器、镜像、云服务器集群的关系 图片1

​  当然,做这个梦之前我们还要解决各种问题,比如容器的规模,数据的持久性,容器间的通信,等等等等。所以把一个经典架构的小平台迁移到容器上也不是一蹴而就的。