Docker和虚拟机的区别及说明

 更新时间:2024年11月05日 11:13:18   作者:洛上言  
Docker与虚拟机(VM)主要差异在于实现方式及效率,Docker通过打包应用及其依赖于容器中,直接与操作系统内核交互,实现跨系统运行,而无需模拟整个操作系统,这使得Docker在体积、启动速度及性能上优于虚拟机,虚拟机通过模拟硬件环境

Docker可以让一个应用在任何操作系统中非常方便的运行。而以前我们接触的虚拟机,也能在一个操作系统中,运行另外一个操作系统,保护系统中的任何应用。

两者有什么差异呢?

Doker的实现原理

Docker把应用及其所需要的依赖、函数库、甚至操作系统函数库也一起打包,那这样一来,应用直接运行时,可以直接调用本地函数库,然后与Linux内核进行交互,这样它就不再关心操作系统是什么系统了,于是就能实现跨系统的一种运行了。

虚拟机(virtual machine)

用到了一种名为Hypervisor的技术,这种技术可以在操作系统中模拟一个计算机的各种各样的硬件设备(比如CPU、内存等等),然后在这个模拟出的计算机上运行另一个操作系统,比如在 Windows 系统里面运行 Ubuntu 系统,这样就可以运行任意的Ubuntu应用了。

既然操作系统都能重新安装,那我们就可以在它上边去安装任意适合的依赖、函数库、以及应用,这样也实现了跨系统的应用部署。

image-20210731145914960

对比来看

我们的虚拟机它是在一个系统里装了另外的一个系统,所以当应用执行时它会以为自己在一台真实的电脑上,因此它会去调用这个内置的操作系统,然后它再与Hypervisor进行交互,然后再把信息传递给了我们的web操作系统,web操作系统再去调用计算机硬件,于是我们的应用执行就完成了,此时它经过了层层的传递,所以它的性能相对来讲是比较差一点的。

Docker应用在执行时,是直接调用操作系统内核的,所以它的执行性能要比虚拟机的执行性能要好很多。

并且Docker仅仅是封装应用程序执行需要的一些简单的函数库和依赖,并没有模拟完整的操作系统,所以体积往往比较小,最小的一个docker容器可能只有几MB,而大一点就是几十MB,几百MB;而虚拟机动不动就要几个g甚至几百g的内存空间,因此体积占用是比较大的。

并且虚拟机启动的时候需要启动虚拟的计算机的操作系统,等于把这个计算机重启了一遍,然后再去启动虚拟操作系统上面的应用。

而Docker就是直接在操作系统上把一个进程启动起来了,所以它的启动速度也是非常的快。

总结:Docker和虚拟机的差异

  • docker是一个系统进程,因为它是直接与操作系统内核做交互;虚拟机是在操作系统中的操作系统
  • docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

因此,现在企业做服务部署,基本上都会去选择用docker,而不会选择用虚拟机。

特性Docker虚拟机
性能接近原生性能较差
硬盘占用一般为 MB一般为 GB
启动秒级分钟级

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 浅谈docker容器镜像的保存位置

    浅谈docker容器镜像的保存位置

    在使用Docker时,我们常常需要从远程仓库中拉取镜像,并将其保存到本地储存位置,本文主要介绍了浅谈docker容器镜像的保存位置,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • docker在linux系统上边下载镜像速度缓慢的问题及解决

    docker在linux系统上边下载镜像速度缓慢的问题及解决

    这篇文章主要介绍了docker在linux系统上边下载镜像速度缓慢的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • docker如何使用阿里加速器的方法

    docker如何使用阿里加速器的方法

    本篇文章主要介绍了docker如何使用阿里加速器的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • docker项目部署的教程(Vue+springboot)

    docker项目部署的教程(Vue+springboot)

    这篇文章主要介绍了docker项目部署的教程(Vue+springboot),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • 如何使用docker+frp进行内网穿透

    如何使用docker+frp进行内网穿透

    这篇文章主要介绍了使用docker+frp进行内网穿透,在公网上的ubuntu系统需要配置相关操作,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • docker-compose部署mysql全过程

    docker-compose部署mysql全过程

    这篇文章主要介绍了docker-compose部署mysql全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2016-06-06
  • Docker搭建es和kibana的详细过程

    Docker搭建es和kibana的详细过程

    这篇文章主要介绍了Docker搭建es和kibana的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • Docker容器使用Arthas监控Java应用的完整指南

    Docker容器使用Arthas监控Java应用的完整指南

    这篇文章主要为大家详细介绍了如何在运行中的 Docker 容器里,为目标 Java 进程快速注入 Arthas 并进行线上诊断,感兴趣的小伙伴可以了解一下
    2025-08-08
  • Docker 批量删除容器或镜像的操作方法

    Docker 批量删除容器或镜像的操作方法

    这篇文章主要介绍了Docker 批量删除容器或镜像的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Docker实现Mariadb分库分表及读写分离功能

    Docker实现Mariadb分库分表及读写分离功能

    这篇文章主要给大家介绍了关于Docker实现Mariadb分库分表及读写分离功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05

最新评论