虚拟机和Docker有什么区别?

news/2025/2/14 2:47:27/

虚拟机

对于虚拟机,抽象层或抽象软件成为管理程序。管理程序就是帮助虚拟机模拟物理计算机的东西。在管理程序下面,我们有些硬件。管理程序管理单个物理主机上不同虚拟机之间的资源分配。管理程序管理单个物理主机上不同虚拟机之间的资源分配。也就是管理程序上有很多个虚拟机,每个虚拟机都运行自己的操作系统,并有自己的虚拟硬件。比如虚拟CPU虚拟存储之类的东西。

管理程序是负责创建,管理和运行这些虚拟机的软件。管理程序有两种类型:

  • 裸机管理程序:直接在主机硬件上运行,在那台电脑上
  • 托管管理程序:管理程序在现有操作系统上运行

虚拟组件,是虚拟机的仿真组件,虚拟cpu,虚拟内存,虚拟存储,虚拟网络接口,这些组件显示给客户机操作系统,就好像他是真正的硬件一样。管理程序负责管理这些虚拟资源并将其分配给每个虚拟机。每个虚拟机中可以运行单个操作系统,使得用户可以在一个物理机上运行多个操作系统和应用程序。

Docker

Docker是一个使用容器化技术的开源平台,他允许开发人员将应用程序以及其依赖打包到轻量级,可移植的容器中。Docker容器对操作系统进行虚拟化,而不是像找个虚拟机管理程序那样对底层硬件进行虚拟化。因此每个独立的容器只包括应用程序及其库和依赖项。

我们先了解Docker引擎,这是管理Docker容器生命周期的核心软件,是为创建,运行和编排容器提供基础设施之类的事情。Docker引擎与主机内核交互,以分配资源并强制容器之间的隔离。主要通过两件事情实现的:一种叫做cgroups或control groups的东西,他们在进程之间分配资源。还有一种叫做名称空间的东西,名称空间限制容器对系统上其他资源的访问和可见性,从而确保容器都有自己的隔离环境。

还有docker镜像,docker镜像是轻量的、独立的、可执行的包,包含了有哪些一个软件所需的一切,包括软件的代码,运行时,系统工具,库以及需要的任何设置。Docker镜像是使用Docker文件构成的,Docker文件是非常简单的文档,提供了创建镜像的说明。

还有容器本身,这是docker引擎中运行的镜像的实例,每个容器都是一个独立的,自给自足的环境,只包括必要的组件,用于运行特定的应用程序,可以快速启动,停止和重启。 

怎么选择?

虚拟机

1、各种操作系统,虚拟机可以运行不同的os,所以我们可以在一个vm运行win,另一个运行linux,都在同一个硬件上。当你跨平台测试应用的时候就很方便。

2、隔离,两种都提供了隔离,但是虚拟机中应为每个都运行在独立的内核和os上,所以基本上都是内置的。

3、遗留问题。虚拟机非常适合运行遗留应用程序,依赖于可能与主机操作系统或其他容器不兼容的特定操作系统版本或者配置的容器。因此,你可以为遗留的应用程序设计一个完美的环境,而不必对其进行更改。

Docker

1、微服务。Docker容器的轻量级特性,他的快速启动时间以及打包和分发依赖关系的能力,使其成为管理基于微服务的应用程序的理想选择

2、速度。快速开发和部署使用Docker容器的能力,因为我们可以快速构建,部署和扩展这些容器,使得非常适合敏捷开发实践和持续继承、持续部署,CI/CD管道。

3、资源效率,容器共享相同的主机内核,并且占用的空间比虚拟机小得多,运行更多的容器更小的开销在同一硬件上运行。

总结

因此在docker和vm之间选择,本质上需要考虑应用程序和基础设施的特定需求。在混合环境中国使用两种技术是很常见的,遗留引用可能vm上运行,微服务在docker运行,不是非此即彼的,虚拟化技术已经改变了我们部署和管理应用的方式

 


http://www.ppmy.cn/news/59945.html

相关文章

提取Windows中系统自带的图标资源

写应用程序,如果想使用Windows下的图标,可以使用Visual Studio中的图标,比如VS2008的ImageLibrary(笔者已经打包上传到CSDN),也可以使用Windows系统自带的图标。 Windows系统自带了不少高质量的图标资源&a…

Python 调用 “GetDoubleClickTime“ 获取系统鼠标双击间隔时间

在Python中,可以使用ctypes模块来调用Windows API。要调用GetDoubleClickTime函数获取鼠标双击间隔时间,可以按照以下步骤进行: 1. 导入ctypes模块。 import ctypes 2. 定义函数原型。 # 定义函数原型 GetDoubleClickTime ctypes.windll.use…

Linux驱动编程(总线设备驱动模型)

一、驱动编写的3种方法 1、传统写法 使用哪个引脚,怎么操作引脚,都写死在代码中。最简单,不考虑扩展性,可以快速实现功能。修改引脚时,需要重新编译。 2、总线设备驱动模型 引入 platform_device/platform_driver&am…

网络安全之IPSEC路由基本配置

目录 网络安全之IPSEC路由基本配置 IPSEC配置的前提分析 协议分析 传输模式分析​编辑 IPSEC路由中的配置 图谱图 配置公网可达 R1配置IKE SA的安全提议 R1配置 IKE SA 的身份认证信息 R3配置IKE SA的安全提议 R3配置 IKE SA 的身份认证信息 R1配置IPSEC的安全提议…

界面开发框架Qt新手入门 - 自定义排序/筛选模型示例(二)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 自定义排序/筛选模型…

队列,双端队列,栈结构

java.util.Queue接口.队列 Queue继承自Collection. 队列可以保存一组元素,但是存取元素必须遵循先进先出原则:FIFO(First Input First Output) 常用实现类:LinkedList 双端队列 java.util.Deque Deque继承自Queue 双端队列是队列两端都可以做出入对操作的队列. 常用实现类…

《编程思维与实践》1047.Base64编码

《编程思维与实践》1047.Base64编码 题目 思路 直接模拟:将每个Base64编码值都分为两部分:前半部分由上一个字符求得,后半部分由下一个字符求得. 特别地,如果字符为第一个或最后一个,则直接可以求得Base64编码. 如下图: 其中,% 2 n 2^n 2n表示取出后n位的二进制位, 这是因…

Canny边缘检测算法

文章目录 前言1、Canny边缘检测算法2、代码1函数 3、代码24、基于tensor数据的代码 前言 最近在向卷积神经网络里的数据预处理和数据增强部分加这个函数,记录一下。 1、Canny边缘检测算法 Canny边缘检测算法是一种经典的边缘检测算法,其基本原理如下&a…