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下载镜像太慢的解决方案,具体操作步骤很详细也很简单,有遇到相同问题但是不知道如何解决的同学可以尝试下
    2021-03-03
  • Docker compose部署minio服务

    Docker compose部署minio服务

    这篇文章主要介绍了Docker compose部署minio服务,minio的作用就是用来存储文件的,比如图片、视频、音频等各种类型的文件,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • docker容器与centos宿主机时间一致设置方法

    docker容器与centos宿主机时间一致设置方法

    这篇文章主要介绍了docker容器与centos宿主机时间一致设置方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • Docker 数据卷及数据容器详细介绍及示例

    Docker 数据卷及数据容器详细介绍及示例

    这篇文章主要介绍了Docker 数据卷及数据容器详细介绍及示例的相关资料,Docker 很强大,不仅部署维护提高效率,docker和宿主之间的数据共享以及docker间的数据共享需要好好研究一下,需要的朋友可以参考下
    2016-11-11
  • CentOS7 禁用Transparent Huge Pages的实现方法

    CentOS7 禁用Transparent Huge Pages的实现方法

    这篇文章主要介绍了 CentOS7 禁用Transparent Huge Pages的实现方法的相关资料,需要的朋友可以参考下
    2016-11-11
  • 使用docker compose快速配置一组容器服务详解

    使用docker compose快速配置一组容器服务详解

    这篇文章主要为大家介绍了使用docker- compose快速配置一组容器服务详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • SpringCloud基于Docker和Docker-Compose的项目部署过程

    SpringCloud基于Docker和Docker-Compose的项目部署过程

    本文介绍了如何卸载旧版本Docker、更新系统、安装Docker及其依赖,并设置国内镜像源以加快下载速度,详细说明了如何安装Docker Compose、配置镜像加速器,并展示了如何使用Docker Compose部署SpringCloud项目,提供了更新和重启容器的方法
    2024-10-10
  • docker获取Let''s Encrypt永久免费SSL证书的方法

    docker获取Let''s Encrypt永久免费SSL证书的方法

    在本篇文章里小编给大家分享了一篇关于docker获取Let's Encrypt永久免费SSL证书的方法,以后需要的朋友们可以参考下。
    2021-01-01
  • 基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境的详细教程

    基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境的详细教程

    K8S全称是Kubernetes,是一个全新的基于容器技术的分布式架构领先方案,这篇文章主要介绍了基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境(环境搭建篇),对docker K8S持续集成交付环境相关知识感兴趣的朋友一起看看吧
    2021-05-05
  • 在Docker中构建并运行Nginx容器的完整教程

    在Docker中构建并运行Nginx容器的完整教程

    Docker 作为一种强大的容器化平台,使得开发、测试和部署变得更加高效和灵活,Nginx 是一款广泛使用的高性能 Web 服务器和反向代理服务器,适用于各种场景,在本教程中,我们将详细介绍如何在 Docker 中构建并运行一个 Nginx 容器,需要的朋友可以参考下
    2024-09-09

最新评论