Docker与虚拟机区别详解(图文全面总结)

云计算 云原生
虚拟机,是基于物理机(宿主机)上运行的独立计算环境,拥有独立的操作系统、应用程序、和资源。比如:一台服务器,可以模拟出多台“虚拟机”。

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)、高密度部署、以及轻量级的隔离场景。

责任编辑:武晓燕 来源: mikechen的互联网架构
相关推荐

2009-08-07 11:46:57

JAVA虚拟机安装设置

2018-05-03 14:48:22

Docker容器虚拟机

2024-07-26 10:35:00

2024-09-04 09:43:36

2019-10-28 11:47:15

Docker虚拟机操作系统

2024-11-06 09:54:58

SpringJava开发

2024-08-29 10:23:42

2024-05-31 13:34:57

2020-01-22 16:40:48

Java开发代码

2024-08-07 14:56:00

Nginx反向代理配置

2024-08-08 13:01:53

2024-07-12 08:42:58

Redis高性能架构

2017-05-31 14:52:53

虚拟机Docker容器

2023-06-03 00:04:10

容器虚拟机VM

2020-07-29 14:52:48

JVM虚拟机内存

2024-08-12 16:09:31

2024-11-06 12:29:02

2024-03-26 07:30:07

Java虚拟机源文件

2011-02-20 22:43:19

Citrix XenS虚拟机

2009-03-30 18:24:41

Vmware虚拟化虚拟机
点赞
收藏

51CTO技术栈公众号