进程 VS 容器 VS 虚拟机
如果站在技术实现原理的角度来看,其实容器更像进程,而非虚拟机。
但是如果我们讨论这门技术的应用场景、解决的问题、终端用户是如何使用的,就会发现容器跟虚拟机非常相似,它们解决的是同样的问题,也就是在同一台 机器上,创建隔离的环境运行多个应用程序,提高机器的资源使用率。
从技术的实现原理,宿主机的隔离机制来看:
- 进程在操作系统中只有很少的隔离,主要是独立的内存空间和用户权限。
- 容器本质上就是一组进程,相比宿主机中的其他进程,容器中的进程运行在自己独立的 namespace 中,也不能无限制的使用宿主机资源,但是相比虚拟机,在安全性方面有所欠缺。
- 虚拟机在操作系统层面拥有完全的隔离,完全是一个独立的环境,拥有一个构建于硬件之上的完整的操作系统。缺点是会占用较多的硬件资源。
从技术要解决的问题,技术的应用场景来看:
- 进程的出现,是因为 CPU 需要一个对象,用来存储程序运行期间的状态、执行上下文等信息。
- 容器的发明,是为了在操作系统上创建隔离的环境,来同时运行多个应用程序。
- 虚拟机的出现,让我们能够在同一台机器上面运行多个完全不同的操作系统,或者是创建多个绝对隔离的环境用来运行应用程序。
总结
通过上面的讨论,我们认识到容器是一个非常强大的技术,它吸取了虚拟机的优点,但是轻量得等同于一组进程,同时也很好的控制了这层抽象带来的资源消耗。