为何需要容器
软件布署的痛
相信所有开发者都有过因系统环境差异被软件布署折磨的苦不堪言的经历,好不容易开发完成,并且在自家机器跑通了,但拿到客户或者生产环境一运行, 一首凉凉铺天盖地地响起,漫山遍野的*路过。 要想你开发的应用换一个地方能run起来,就必须保证操作系统的设置、各种依赖程序的安装以及其他配置项的设置与你测试的环境保持完全一致,这就 导致每次布署,这些环境的准备要重来一遍,而且在换一个机器安装这些依赖时很可能还会踩到新的坑,简直崩溃。 能想到的坚决方案是把应用程序依赖环境跟应用程序打包在一个集装箱里,每次布署时直接运行整个集装箱,这就解决了环境一致性的问题。
虚拟机存在问题
虚拟机(VM)就可以提供这种带环境安装的解决方案,可以将应用程序安装在虚拟机里面,需要布署的话,把整个虚拟机的静态描述文件copy过来直接启动虚拟机就可以了。 其原理是通过物理硬件层抽象,实现在一台机器上运行多个VM。隔离级别是操作系统级别的,每个 VM 都包含一整套操作系统、多个应用、必要的二进制文件和库资源,因此占用大量空间,启动缓慢。
容器解决方案的优势
与虚拟机不同的是,容器是对操作系统进行抽象的,每个容器只包括应用程序与必要的依赖资源,共享操作系统内核,隔离是进程级的,每个容器就是操作系统中一个独立的进程。因此占用空间小很多,启动也非常快
容器技术其实是先于docker而存在的,docker提供了容器技术的封装,让使用者可以很方便的操作容器,而不用关心其底层实现原理