背景
程序开发一套款app,在自己本地部署一套环境,待测试时可能会有这种那种的问题,于是程序员又部署一次同样的环境,测试通过后运维在客户安装时又遇到同样的环境问题,于是又搭建了n多次环境,这种环境的部署费时又费力,有没有什么技术可以解决这种问题。答案当时是有,虚拟机啊,VMware。
先搭好一套虚拟机环境然后给测试和运维clone出来不就可以了吗?
在没有容器技术之前,这确实是一个好办法,只不过这个办法还没有那么好。
先科普一下,现在云计算其底层的基石就是虚拟机技术,云计算厂商买回来一堆硬件搭建好数据中心后使用虚拟机技术就可以将硬件资源进行切分了,比如可以切分出100台虚拟机,这样就可以卖给很多用户了。
容器技术VS虚拟机
虚拟机
一个虚拟机其实也是一个操作系统,操作系统其实是一个很重而且很笨的程序。操作系统运行起来需要占用很多资源,刚装好的系统什么都没装都没部署,单纯操作系统占用至少几十个G起不,内存要几个G起步。使用虚拟机部署,能部署的虚拟机个数不多。
如果有一种技术可以让我们避免把内存浪费在“无用”的操作系统上岂不是太香?这是问题一,主要原因在于操作系统太重了。
还有另一个问题,那就是启动时间问题,我们知道操作系统重启是非常慢的,因为操作系统要从头到尾把该检测的都检测了该加载的都加载上,这个过程非常缓慢,动辄数分钟,因此操作系统还是太笨了。
那么有没有一种技术可以让我们获得虚拟机的好处又能克服这些缺点从而一举实现鱼和熊掌的兼得呢?
答案是肯定的,这就是容器技术。
容器技术
容器英文是container,集装箱,集装箱的好处有哪些呢:
- 集装箱之间相互隔离
- 长期反复使用
- 快速装载和卸载
- 规格标准在码头和船上都可以摆放
其实软件中容器和集装箱很像,软件开发的一大目的就是隔离,应用程序在运行时互不干扰,这种隔离实现起来很难,一种就是上述所说的虚拟机,优缺点上述已经阐述。另一种就是容器技术,只隔离应用程序的运行环境但容器之间可以共享一个操作系统,这里运行时环境指的是程序运行依赖的各种库以及配置。
容器更加的轻量级且占用的资源更少,与操作系统动辄几G的内存占用相比,容器技术只需数M空间,因此我们可以在同样规格的硬件上大量部署容器,这是虚拟机所不能比拟的,而且不同于操作系统数分钟的启动时间容器几乎瞬时启动,容器技术为打包服务栈提供了一种更加高效的方式,So cool。
容器只是一种通用技术,而docker只是其中实现。下一篇详细简单介绍docker以及其简单使用。
今天就到这里吧~