🗺️博客地图
一、容器技术的起源
假如公司计划研发一款新的软件,研发工程师搭建了一套环境开始写代码,代码运行起来后,把代码交给测试工程师,这时测试工程师开始从头到尾搭建这套环境,测试过程中出现问题找研发工程师,研发工程师说在他的环境上可以正常运行。测试同学开始调整运行环境,测完后终于可以上线了,这时运维工程师又要重新从头到尾搭建这套环境,调试搭建好环境后开始上线,刚上线投入生产就崩溃了,领导追责,都说在自己环境可以正常运行。从整个过程可以看到,重复搭建了三套环境,浪费时间影响效率,在这低效生产的危急时刻,容器技术应运而生。
如果真的遇到上述例子的情况,可能有人会使用虚拟机,比如采用VMware,先搭好一套虚拟机环境然后给测试和运维clone出来。在没有容器技术之前,这确实是一个好办法,只不过这个办法还没有那么好。
二、容器技术 vs 虚拟机
和一个单纯的应用程序相比,操作系统本身就是一个很笨重的程序,运行一个操作系统是需要占用很多资源的。
假设我有一台机器,16G内存,需要部署三个应用,那么使用虚拟机技术可以这样划分:
在这台机器上开启三个虚拟机,每个虚拟机上部署一个应用,其中VM1占用2G内存,VM2占用1G内存,VM3占用了4G内存。
可以看到虚拟本身就占据了总共7G内存,因此没有办法划分出更多虚拟机从而部署更多的应用程序,可是我们主要目的是为了使用的是应用程序,不是操作系统。
如果有一种技术可以避免把内存浪费在“无用”的操作系统上那该多香啊,主要原因在于操作系统太重了。
还有另一个就是启动时间问题,操作系统重启是非常慢的,因为操作系统要从头到尾把该检测的都检测了,该加载的都加载上,这个过程非常缓慢,动不动数分钟,因此操作系统还是太笨了。
有没有一种技术可以让我们获得虚拟机的好处又能克服这些缺点从而一举实现鱼和熊掌的兼得呢?答案是肯定的,这就是容器技术。
三、什么是容器
容器一词的英文是container,其实container还有集装箱的意思,集装箱绝对是商业史上了不起的一项发明,大大降低了海洋贸易运输成本。让我们来看看集装箱的好处:
- 集装箱之间相互隔离
- 长期反复使用
- 快速装载和卸载
- 规格标准,在港口和船上都可以摆放
回到软件中的容器,其实容器和集装箱在概念上是很相似的。
现代软件开发的一大目的就是隔离,应用程序在运行时相互独立互不干扰,这种隔离实现起来是很不容易的,其中一种解决方案就是上面提到的虚拟机技术,通过将应用程序部署在不同的虚拟机中从而实现隔离。
与虚拟机不同的是,容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,这里的运行环境指的是程序运行依赖的各种库以及配置。