Docker与虚拟机比较

news2024/9/24 17:51:19

在对比Docker和虚拟机前,先简单了解下虚拟化,明确Docker和虚拟机分别对应的虚拟化级别,然后对Docker和虚拟机进行比较。需要注意的是,Docker和虚拟机并没有什么可比性,而是Docker使用的容器技术和虚拟机使用的虚拟化技术的比较。

虚拟化(Virtualization)简介

虚拟化是一个通用的概念,在不同的领域有不同的理解。在计算机领域,一般指的是计算虚拟化(Computer Virtualization)。维基百科上对计算机虚拟化的定义如下:

在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,
予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用比原来的组态更好的方式来应用这些资源。  

可见,虚拟化的核心是对资源的抽象,目标往往是为了在同一个主机上同时运行多个系统或应用,从而提高系统资源的利用率,并且带来降低成本、方便管理和容错容灾等好处。
根据作用的对象,可将虚拟化分为基于硬件的虚拟化和基于软件的虚拟化。注意,真正意义上的基于硬件的虚拟化技术并不多见,少数如网卡中的单根多IO虚拟化(Single Root I/O Virtualization and Sharing Specification,SR-IOV)等技术,不在本文的讨论范围。
基于软件的虚拟化从对象所在的层次,有可以分为应用虚拟化和平台虚拟化。其中应用虚拟化一般指的是一些模拟设备,如一些模拟器软件。平台虚拟化又可细分为以下几个子类:
(1) 完全虚拟化。虚拟机模拟完整的底层硬件环境和特权指令的执行过程,客户操作系统无需进行修改。如VMware Workstation、VirtualBox等。
(2) 硬件辅助虚拟化。利用硬件辅助支持处理敏感指令来实现完全虚拟化的功能,客户操作系统无需修改,如VMware Workstation、KVM等。
(3) 部分虚拟化。只针对部分硬件资源进行虚拟化,客户操作系统修改进行修改。现在某些虚拟机技术的早期版本支持部分虚拟化。
(4) 超虚拟化。部分硬件接口以软件的形式提供给客户操作系统,客户操作系统需要进行修改,如早期的Xen。
(5) 操作系统级虚拟化。内核通过创建多个虚拟的操作系统实例(内核和库)来隔离(如容器技术)不同的进程,如Docker。

请添加图片描述

Docker与虚拟机比较

对于虚拟机来说,虚拟机通过硬件虚拟化功能模拟出运行一个操作系统所需的各种硬件,比如CPU、内存、I/O设备等。然后,它在这些虚拟的硬件上安装一个新的操作系统——客户操作系统(Guest OS)。这样,用户的应用程序就可以在这个虚拟的机器中运行。
对于Docker来说,Docker通过容器技术,在操作系统的上层提供了隔离的环境。然后用户的应用程序就可以在这个隔离的环境中运行。
虚拟机和Docker的架构差异可以用下图表示:

请添加图片描述

从上图可知,虚拟机通过虚拟的硬件,可安装一个操作提供和其他应用程序。所以,虚拟机创建的时间比较长,启动时间以分钟为单位。因为在运行应用程序前还得运行整个操作系统,所以分配所需的CPU、内存、磁盘等资源较多。同时,基于虚拟机方式运行N个不同的应用需要启用N个虚拟机(每个虚拟机需要单独分配独占的内存、磁盘等资源),运行密度较低。虚拟机因为提供了隔离操作系统的环境,所以可以实现完全隔离,从而保证安全性。
而Docker等容器引擎,可以和主机的内核直接打交道。因为容器中运行的应用程序和计算机的操作系统之间没有额外的中间层,没有资源被冗余软件的运行或虚拟硬件的模拟浪费掉。所以,容器的创建时间较短,启动时间以秒为单位。且分配所需的CPU、内存、磁盘等资源较少。同时,基于容器方式运行N个不同的应用只需要启用N个容器即可,运行密度较高。Docker等容器引擎利用namespace、cgroup、根文件系统等技术实现了容器隔离环境,支持进程级隔离,存在一定的安全风险。但是,从1.3.0版本开始,Docker重点改善了容器的安全控制和镜像的安全机制,极大地提高了使用Docker的安全性。在已知的大规模应用中,目前尚未出现值得担忧的安全隐患。
Docker等容器引擎与虚拟机的比较,可以总结为一下几个方面:

特性容器虚拟机
隔离提供与主机和其他容器的轻度隔离,但不提供与虚拟机一样强的安全边界提供与主机和其他VM的完全隔离。
启动速度秒级分钟级
性能接近原生较弱
资源占用运行操作系统的用户模式部分,可以对其进行定制,使之只包含应用所需的服务,减少所使用的系统资源。运行包含内核的完整操作系统,需要更多的系统资源,如CPU、内存、存储等。
运行密度单机支持上千个容器单机一般十几个
安全性轻度隔离,存在不安全隐患完全隔离,安全性更高

参考

《Docker实战》 Jeff Nickoloff 著, 胡震,杨润青 黄帅 译
《Docker技术入门与实战》 杨保华 戴王剑 曹亚仑 著
https://blog.daocloud.io/4001.html 容器与虚拟机
https://zhuanlan.zhihu.com/p/81525291 虚拟机与容器的区别
https://zhuanlan.zhihu.com/p/271846374 容器、Docker、虚拟机
https://learn.microsoft.com/zh-cn/virtualization/windowscontainers/about/containers-vs-vm 容器与虚拟机
https://aijishu.com/a/1060000000206531 Docker容器、虚拟机和裸机运行的性能比较

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1483376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git介绍4.2

git(版本控制工具) 一、git 介绍 1、git是目前世界上最先进的分布式版本控制系统,可以有效,高速的处理从小到大的项目版本管理。 2、git是linux torvalds 为了帮助管理linux内核开发二开发的一个开放源码的版本控制软件。 3、git作用:更好…

【深度学习笔记】计算机视觉——图像增广

图像增广 sec_alexnet提到过大型数据集是成功应用深度神经网络的先决条件。 图像增广在对训练图像进行一系列的随机变化之后,生成相似但不同的训练样本,从而扩大了训练集的规模。 此外,应用图像增广的原因是,随机改变训练样本可以…

Java宝典-类和对象

目录 1.面向对象1.1 面向过程与面向对象 2. 类的定义和使用2.1 如何定义类3.类的实例化4.this引用5.构造方法5.1 什么是构造方法5.2 构造方法的特点 6.包6.1 导包6.2 自定义包 7.封装8.访问限定符9.static9.1 static修饰的成员变量9.2 static修饰的成员方法 10.代码块10.1 普通…

大数据信用报告如何查询?有哪些需要注意的?

大数据信用对于有资金周转的人来说是比较重要的,主要由于大数据信用无形的被不少机构用于贷前风控,无论是机构要求的还是自查,提前了解大数据信用情况是常规操作,那大数据信用报告如何查询?有哪些需要注意的呢?本文详细为大家讲…

Linux使用基础命令

1.常用系统工作命令 (1).用echo命令查看SHELL变量的值 qiangziqiangzi-virtual-machine:~$ echo $SHELL /bin/bash(2).查看本机主机名 qiangziqiangzi-virtual-machine:~$ echo $HOSTNAME qiangzi-virtual-machine (3).date命令用于显示/设置系统的时间或日期 qiangziqian…

数据结构篇十:红黑树

文章目录 前言1. 红黑树的概念2. 红黑树的性质3. 红黑树节点的定义4. 红黑树的插入4.1 情况一: cur为红,p为红,g为黑,u存在且为红4.2 情况二: cur为红,p为红,g为黑,u不存在/u存在且为黑。4.2.1 …

图论 - Trie树(字符串统计、最大异或对)

文章目录 前言Part 1:Trie字符串统计1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 Part 2:最大异或对1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 前言 本篇博客将介绍Trie树的常见应用,包括:Trie…

30道python自动化测试面试题(全)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、什么项目适合做自动化测试? 关键字:…

【Pytorch】论文复现 Vision Transformer (ViT)

文章目录 0. 进行设置1. 获取数据2. 创建Dataset和DataLoader3. 复现 ViT 论文:概述4. Equation 1: 将数据拆分为 patch 并创建类、位置和 patch 嵌入5. Equation 2: Multi-Head Attention (MSA)6. Equation 3: Multilayer Perceptron (MLP)7. 创建 Transformer 编码…

【计算机网络_应用层】协议定制序列化反序列化

文章目录 1. TCP协议的通信流程2. 应用层协议定制3. 通过“网络计算器”的实现来实现应用层协议定制和序列化3.1 protocol3.2 序列化和反序列化3.2.1 手写序列化和反序列化3.2.2 使用Json库 3.3 数据包读取3.4 服务端设计3.5 最后的源代码和运行结果 1. TCP协议的通信流程 在之…

每个人都应该知道的AI大模型:通往智能未来的桥梁

人工智能大模型已成为我们通往智能未来的桥梁。这些模型,如OpenAI的GPT-4,不仅是技术的巅峰,更是人类智慧的结晶。在这篇文章中,我们将深入探讨AI大模型的重要性,它们是如何工作的,以及它们对社会的潜在影响…

算法------(13)KMP

例题:(1)AcWing 831. KMP字符串 。。其实写完也不太理解。。随便写点吧 KMP就是求next数组和运用next的数组的过程。相比传统匹配模式一次更新一单位距离的慢速方法,next数组可以让下表字符串一次更新n - next【n】个距离&#x…

Java项目layui分页中文乱码

【问题描述】这部分没改之前中文乱码。 【解决办法】在layui.js或者layui.all.js文件中替换共、页、条转换成Unicode码格式。 字符Unicode共&#x5171页&#x9875条&#x6761【完美解决】改完之后重新运行项目,浏览器F12缓存清除就好了,右键

从键盘输入5个整数,将这些整数插入到一个链表中,并按从小到大次序排列,最后输出这些整数。

设节点定义如下struct Node {int Element; // 节点中的元素为整数类型struct Node * Next; // 指向下一个节点 }; 从键盘输入5个整数,将这些整数插入到一个链表中,并按从小到大次序排列,最后输出这些整数。注释那段求指出错误,求解…

【QT+QGIS跨平台编译】之六十二:【QGIS_CORE跨平台编译】—【错误处理:未定义类型QgsPolymorphicRelation】

文章目录 一、未定义类型QgsPolymorphicRelation二、解决办法一、未定义类型QgsPolymorphicRelation 报错信息: 错误原因为,使用了未定义类型 QgsPolymorphicRelation 二、解决办法 QgsRelation.h文件中 ①注释第36行: //class QgsPolymorphicRelation;②注释第414行: …

leetcode括号生成

题目描述 解题思路 首先看到题目,一开始是并没有思路的。这时候可以在纸上进行演算一下结果。当只有一对括号的时候,我们可以得知结果[“()”],当有两对括号的时候,我们可以发现,括号在第一个基础上,要么在括号内部出…

Java中心校智慧校园智慧班牌物联网平台源码

目录 智慧班牌 班牌首页 班级信息 课表信息 视频 图片 进离校管理 人脸登录页 学生个人中心 请假管理 成绩管理 家长留言 学生绑卡 学生评价 系统设置 通知管理 值日管理 倒计时 班级德育 班牌模式 1.课堂授课模式 2.家长会签到模式 3.考场模式 4.班级…

MySQL:错误ERROR 1045 (28000)详解

1.问题说明 有时候我们登录Mysql输入密码的时候,会出现这种情况: mysql -u root -p Enter Password > ‘密码’ 错误:ERROR 1045 (28000): Access denied for user ‘root’‘localhost’ (using password: YES) 或者:错误…

本届挑战赛季军方案:构建由大模型辅助的基于多模态数据融合的异常检测、根因诊断和故障报告生成系统

DDopS团队荣获本届挑战赛季军。该团队来自中山大学计算机学院Intelligent DDS 实验室。实验室主要方向为云计算、智能运维(AIOps)、软件定义网络、分布式软件资源管理与优化、eBPF 性能监控与优化等。 选题分析 基于对竞赛数据的洞察和对时代趋势的考量,我们尝试应…

YOLOv9改进|增加SPD-Conv无卷积步长或池化:用于低分辨率图像和小物体的新 CNN 模块

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、文章摘要 卷积神经网络(CNNs)在计算即使觉任务中如图像分类和目标检测等取得了显著的成功。然而,当图像分辨率较低或物体较小时&…