Docker
Docker 是一个开源的容器化平台,能够将应用程序、及其依赖环境打包成轻量级、可移植的容器。
为什么Docker如此之风靡?原因很简单:因为Docker能很好的解决在不同环境中运行一致性,并且占用的资源还少,而且还快。
所以说,好的东西,就应该得到更多人的喜欢,因为Docker确确实实解决了我们平常开发和运维的问题。
比如:在如今的微服务架构中,我们可以将应用程序拆分成多个独立的服务,每个服务运行在独立的容器中。
这样,不仅方便开发、测试、和部署,而且Docker 容器可以在不同的操作系统和平台上运行,确保跨平台的一致性。
图片
多个容器可以在同一台计算机上运行,并与其他容器共享其OS内核,每个容器在用户空间中作为隔离的进程运行。
虚拟机
虚拟机,全程是Virtual Machine,简称 “虚拟机VM”。
虚拟机,是一种利用软件模拟的计算机系统,它能够在物理硬件的基础上,运行多个虚拟计算机。
如下图所示:
图片
虚拟机,是基于物理机(宿主机)上运行的独立计算环境,拥有独立的操作系统、应用程序、和资源。
比如:一台服务器,可以模拟出多台“虚拟机”。
这个时候,虚拟机运行在一个物理主机上,它的硬件资源(如:CPU、内存、磁盘...等),由宿主机提供并被虚拟化。
虚拟机的管理工具,常见的包括 :VMware、Hyper-V... 等,主要用于创建/和管理虚拟机。
虽然,看上去是多了几台“服务器”,但是多个虚拟机的操作系统,是共享同一个硬件环境中并存运行。
虽然虚拟机、和容器都是虚拟化技术,但它们的运行方式、和用途有所不同,下面我重点谈谈两者的区别@mikechen
Docker和虚拟机区别
图片
虚拟机更重,Docker相对轻量级
这是Docker和虚拟机最大的区别,我把它放到第一位。
首先,虚拟机提供完整的操作系统、和硬件环境,适用于需要隔离的多操作系统环境。
虚拟机由于每个虚拟机,都需要携带一个完整的操作系统(OS),这点非常的重要。
所以,采用虚拟机了,即使应用程序本身很小,整体体积也会因为操作系统的存在而变得庞大。
所以,这使得虚拟机不仅占用大量的存储空间,还在启动时需要加载整个操作系统,导致其启动时间较长、运行时的资源占用较高。
这也是为什么?Docker虚拟化技术风靡的最重要的原因。
Docker则通过共享宿主机操作系统的内核,避免了为每个应用程序分配一个独立的操作系统。
这样,每个 Docker 容器只包含:应用程序、及其依赖,减少了镜像的体积,并且启动速度更快,运行更加轻巧。
这也是 Docker 相比虚拟机最大的优势之一,尤其在微服务和容器化应用场景下显得非常有效。
虚拟机启动慢,Docker启动快
刚才我已经谈到了两者最大的区别,就谈到了虚拟机需要携带操作系统(OS)。
所以,虚拟机的启动时间较长,这就很正常了,因为:虚拟机,需要启动完整的操作系统。
而Docker容器,不需要启动操作系统,因此具有更快的响应速度。
虚拟机占用资源多,Docker占用资源小
由于虚拟机,需要运行一个独立的操作系统,因此资源开销较大。
比如:虚拟机需要占用较多的 CPU、内存、磁盘空间,并且每个虚拟机都有固定的资源分配。
所以,一台服务器一般也就不能虚拟很多“服务器”。
而Docker 容器,共享宿主机的操作系统内核,不需要额外的操作系统开销。
所以,占用资源更小,是“进程”级别的,所以资源利用率更高。
虚拟机适用重量级隔离,容器轻量级隔离
当然,说了这么多,也不是说虚拟机一无是处,关键是用对应用场景。
比如:虚拟机就适用于需要强隔离的多操作系统环境,常用于运行不同的操作系统、测试环境、或需要高安全性的场景。
而Docker容器,更适用于:微服务架构、持续集成与交付(CI/CD)、高密度部署、以及轻量级的隔离场景。