容器和虚拟机有什么不同
一、 基础架构图
从上图我们可以看出:
虚拟机:物理机上可以启动多个虚拟机,然后一个虚拟机上面可以跑多个应用程序。
虚拟出一套完整的硬件,在其上运行一个完整的操作系统,在该系统上再运行所需应用进程。
容器:物理机上可以启动多个容器,然后一个容器上面可以跑多个应用程序。
容器的应用进程则直接运行于宿主机的内核,容器内没有自己的内核,也没有进行硬件虚拟。
二、 两者异同
共同点:
(1)虚拟机和容器都是宿主机上面的一个进程,也就是一个应用程序。
(2)容器和虚拟机都有着资源隔离、安全隔离和系统资源分配的功能。
不同点:
容器技术共享宿主机的操作系统和硬件资源,省去了启动和维护整个虚拟客户机的开销(硬件初始化、Kernel boot、init等),因而它非常轻量级,占用内存资源少,启动快,但安全隔离性低于虚拟机。
容器将应用程序的配置和所有依赖打包成一个镜像在容器中,为应用程序提供一个可以独立运行的环境,可以保证应用程序在任何环境中都可以按照预期来运行,方便持续集成和持续部署。
总结
以QEMU+KVM虚拟化技术为例(这里不包括其它类型的虚拟化的技术),虚拟机和容器都依赖了Linux的技术特性,虚拟机依赖于Linux的KVM模块,容器利用用Namespace 和 Cgroup这两个内核特性。
简要架构图如下:
从上图我们可以看出:
虚拟机:物理机上可以启动多个虚拟机,然后一个虚拟机上面可以跑多个应用程序。
虚拟出一套完整的硬件,在其上运行一个完整的操作系统,在该系统上再运行所需应用进程。
容器:物理机上可以启动多个容器,然后一个容器上面可以跑多个应用程序。
容器的应用进程则直接运行于宿主机的内核,容器内没有自己的内核,也没有进行硬件虚拟。
二、 两者异同
共同点:
(1)虚拟机和容器都是宿主机上面的一个进程,也就是一个应用程序。
(2)容器和虚拟机都有着资源隔离、安全隔离和系统资源分配的功能。
不同点:
容器技术共享宿主机的操作系统和硬件资源,省去了启动和维护整个虚拟客户机的开销(硬件初始化、Kernel boot、init等),因而它非常轻量级,占用内存资源少,启动快,但安全隔离性低于虚拟机。
容器将应用程序的配置和所有依赖打包成一个镜像在容器中,为应用程序提供一个可以独立运行的环境,可以保证应用程序在任何环境中都可以按照预期来运行,方便持续集成和持续部署。
总结
以QEMU+KVM虚拟化技术为例(这里不包括其它类型的虚拟化的技术),虚拟机和容器都依赖了Linux的技术特性,虚拟机依赖于Linux的KVM模块,容器利用用Namespace 和 Cgroup这两个内核特性。
简要架构图如下: