Docker技术概论(1):Docker与虚拟化技术比较

Docker技术概论(1)
Docker与虚拟化技术比较

- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at: https://jclee95.blog.csdn.net
My WebSitehttp://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/136358470
HuaWei:https://bbs.huaweicloud.com/blogs/422803

【介绍】:本文将深入探讨Docker与传统虚拟机技术的区别,着重分析两者在抽象层级、隔离性、资源消耗、启动速度以及在实际应用中的优势和局限。通过对比分析,我们旨在为读者提供一个清晰的视角,以理解Docker技术如何在现代软件开发和运维中发挥其独特的价值。

在这里插入图片描述


下一节:《 Docker安装与配置


1. 概述

1.1 引言

在当今的软件开发和部署领域,虚拟化技术扮演着至关重要的角色。它不仅提高了硬件的利用率,还极大地简化了应用的部署和管理过程。虚拟化技术可以大致分为两类:硬件级别的虚拟化和系统层面的虚拟化。硬件级别的虚拟化主要通过虚拟机(VM)实现,而系统层面的虚拟化则主要通过容器技术实现,Docker是后者中最为人熟知的技术之一。

虚拟机技术通过模拟整个硬件系统,允许在单一的物理机上运行多个操作系统实例。这种方法为每个虚拟机提供了完全独立的运行环境,但也因此导致了较高的资源消耗和管理复杂度。相比之下,Docker等容器技术在操作系统级别提供虚拟化,允许应用程序和其依赖被打包在轻量级的容器中。这些容器共享宿主机的操作系统内核,但在用户空间中作为独立进程运行,从而实现了快速启动、低资源消耗和易于管理的特点。

1.2 关于本文

本文将深入探讨Docker与传统虚拟机技术的区别,着重分析两者在抽象层级、隔离性、资源消耗、启动速度以及在实际应用中的优势和局限。通过对比分析,我们旨在为读者提供一个清晰的视角,以理解Docker技术如何在现代软件开发和运维中发挥其独特的价值。

2. 虚拟机 => 硬件级别的虚拟化技术

虚拟机技术主要针对那些需要完全独立运行环境的应用场景。例如,在软件开发和测试中,开发者可以在不同的虚拟机中安装不同的操作系统和软件环境,以测试软件在不同环境下的兼容性和性能。在企业IT环境中,虚拟机技术可以用于服务器的虚拟化,提高硬件资源的利用率,简化数据中心的管理。

2.1 虚拟机技术概述

2.1.1 虚拟机技术简介

虚拟机Visual Machine)是物理硬件的抽象,可将一台服务器变成多台服务器。虚拟机管理程序允许多个虚拟机在一台机器上运行。每个虚拟机都包含操作系统、应用程序、必要的二进制文件和库的完整副本 - 占用数十 GB。虚拟机的启动速度也可能很慢。

虚拟机技术是一种基于硬件层面的虚拟化技术,它通过软件模拟出一台或多台完整的计算机系统,允许用户在单一的物理硬件上同时运行多个操作系统实例。这种技术的核心在于它提供了一个抽象层,这个抽象层位于物理硬件和操作系统之间,使得虚拟机内的操作系统以为自己在访问真实的物理硬件。。这种技术手段主要针对那些需要完全独立运行环境的应用场景。

2.1.2 虚拟机的抽象层级

虚拟机的实现依赖于虚拟机监视器(Virtual Machine Monitor, VMM)或称为 Hypervisor

Hypervisor直接运行在物理硬件上(Type 1,裸机Hypervisor)或在宿主操作系统之上(Type 2,宿主Hypervisor),负责创建虚拟机环境、模拟硬件资源,并确保虚拟机内运行的操作系统与应用程序无法直接访问物理硬件。

在这里插入图片描述

2.1.3 虚拟机组成

每个虚拟机都是一个完整的计算机系统的模拟,包括虚拟的CPU、内存、硬盘、网络接口等硬件资源。在这个虚拟环境中,可以安装操作系统和必要的应用程序,每个虚拟机都拥有自己独立的操作系统、应用程序、必要的二进制文件和库的完整副本。这种配置使得虚拟机可以像物理机一样执行各种计算任务,但其数据和状态完全独立于宿主机和其他虚拟机。

2.1.4 资源消耗与启动速度

由于每个虚拟机都需要模拟完整的硬件环境和运行一个完整的操作系统,因此它们通常会占用较多的计算资源,包括CPU时间、内存和存储空间。虚拟机镜像的大小通常在数十GB,这对物理资源的需求较高。此外,虚拟机的启动速度相对较慢,因为启动过程包括加载和初始化虚拟硬件环境以及启动操作系统,这可能需要几分钟的时间。

2.1.5 应用场景

虚拟机技术主要针对那些需要完全独立运行环境的应用场景。例如,在软件开发和测试中,开发者可以在不同的虚拟机中安装不同的操作系统和软件环境,以测试软件在不同环境下的兼容性和性能。在企业IT环境中,虚拟机技术可以用于服务器的虚拟化,提高硬件资源的利用率,简化数据中心的管理。

2.2 隔离性

隔离性不仅对于保证虚拟机的安全性和稳定性至关重要,也是实现资源有效管理和优化的基础。它允许在同一台物理服务器上安全地运行多个不同的操作系统和应用程序,极大地提高了硬件资源的利用率。此外,隔离性还为软件开发和测试提供了灵活性,开发者可以在隔离的环境中进行实验,而不必担心影响到生产环境。

2.2.1 Hypervisor的作用

如前面所介绍,Hypervisor,主要功能是管理和分配物理计算资源(如CPU、内存和存储)给虚拟机,并提供虚拟机之间的隔离。它允许虚拟机在一个宿主系统上共享物理硬件,同时保持彼此分隔,以避免干扰和冲突。

一个典型的虚拟机包括自己的操作系统、一系列的应用程序,以及所需的虚拟硬件资源,如CPU、内存和硬盘等。虚拟机间的隔离性是VMware的一个重要特点,每个虚拟机都运行在自己独立的操作系统上,彼此之间互不影响。

2.2.2 隔离性的实现

硬件级别的隔离:Hypervisor通过模拟硬件来为每个虚拟机创建一个完全独立的环境。虚拟机内的操作系统和应用程序认为它们正在访问真实的物理硬件,但实际上它们访问的是Hypervisor提供的虚拟硬件。
网络隔离:虚拟机之间的网络也是隔离的。Hypervisor可以为每个虚拟机配置独立的虚拟网络接口,甚至可以创建虚拟局域网(VLAN)来进一步增强隔离性和安全性。
存储隔离:虚拟机的存储也是独立的。虽然多个虚拟机可能共享同一物理存储设备,但Hypervisor会确保它们的存储空间不会相互干扰。每个虚拟机都有自己的虚拟硬盘,这就像是在物理硬盘上划分了独立的分区。

2.3 虚拟机的一些不足

虽然虚拟机技术为软件开发、测试和部署提供了极大的灵活性和隔离性,但它也存在一些明显的不足之处,主要包括 资源消耗大启动和运行速度慢,以及管理复杂度高等方面。

2.3.1 资源消耗大

每个虚拟机都需要模拟一个完整的硬件环境,并在其上运行一个完整的操作系统实例,以及所需的应用程序和服务。这意味着,即使是最简单的虚拟机也需要为其分配足够的CPU资源、内存和存储空间。在物理主机上运行多个虚拟机时,这些资源的需求会迅速累加,导致硬件资源的利用率迅速饱和。

相比之下,容器技术如 Docker 仅需在宿主操作系统上额外运行应用程序和其依赖,而不需要为每个容器分配和模拟完整的操作系统资源,从而大幅降低了资源消耗。

2.3.2 启动和运行速度慢

由于虚拟机需要加载和运行整个操作系统,其启动时间相对较长,特别是当虚拟机镜像较大或物理资源有限时,这一问题更为明显。此外,虚拟机在运行时也可能因为资源分配和调度的开销而表现出较慢的响应速度。

相比之下,Docker 容器由于共享宿主机的操作系统内核,可以在几秒钟内启动,且运行效率更高。

2.3.3 管理复杂度高

管理虚拟机涉及到对虚拟硬件环境、操作系统实例以及上面运行的应用程序和服务的管理。当虚拟机数量增多时,这些管理任务会变得尤为复杂。每个虚拟机可能需要 单独的安全补丁、操作系统更新、配置更改和监控。

此外,虚拟机之间可能存在依赖关系,这些依赖关系的管理也增加了系统管理员的负担。

而使用 Docker 等容器技术,可以通过 容器编排工具(如Kubernetes)来简化这些管理任务,提高了运维效率。

3 Docker => 系统层面的虚拟化技术

3.1 Docker的抽象层级

Docker容器化技术则采用了一种不同的方法。它在操作系统级别提供虚拟化,通过在宿主机的操作系统内核上直接运行容器实现。这种方式使得Docker容器更加轻量级,并且启动速度更快。

与传统的硬件级别虚拟化相比,操作系统级别的虚拟化具有以下特点和优势:

  1. 资源占用小:容器不需要运行完整的操作系统,因此它们消耗的资源远少于传统虚拟机。
  2. 快速启动和部署:由于不需要启动完整的操作系统,容器可以在几秒钟内启动和部署。

3.2 隔离性

Docker容器虽然共享宿主机的内核,但在操作系统层面实现了良好的隔离,这将在后面继续介绍。

3.3 容器化应用

Docker 本身将容器解释为“软件的标准单元”,**容器 **是应用程序层的抽象,它将代码和依赖项打包在一起。多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器作为用户空间中的独立进程运行。容器比虚拟机占用更少的空间(容器镜像的大小通常为数十MB),可以处理更多的应用程序,并且需要更少的虚拟机和操作系统。

在这里插入图片描述

在实际应用中,Docker技术在简化和加速开发流程方面发挥了重要作用。对于系统管理员而言,配置一个能够持续提供一致体验的工作环境,在面对多个不同的操作系统、不同版本的操作系统及各种库和编程语言时,一直是一个巨大的挑战。Docker通过减少活动部件的数量,有效解决了这一问题。现在,管理员只需要关注Docker引擎和运行时的一致性,而不是繁杂的操作系统和程序版本。

在生产环境中,Docker同样展现出了其优势。例如,考虑一个需要从Python 2.7升级到Python 3.5的Web应用程序。传统方法可能涉及复杂的操作系统升级或第三方依赖项的安装,而使用Docker,我们只需构建一个包含新应用程序代码和依赖项的新容器。如果新版本有问题,简单地回滚到旧容器即可。这种方式显著降低了故障恢复时间,同时也减少了由于系统和应用程序的变更导致的不确定性。

4. 结论

本文深入探讨了 Docker 与传统虚拟机技术的区别,通过对比分析它们在抽象层级、隔离性、资源消耗、启动速度以及应用场景等方面的不同,揭示了 Docker 在现代软件开发和运维中的独特价值和优势。

虚拟机技术,作为一种硬件级别的虚拟化手段,通过模拟整个硬件系统来提供完全独立的运行环境,适用于需要高度隔离和完整操作系统支持的场景。然而,这种技术的资源消耗大、启动和运行速度慢、管理复杂度高等特点,使其在某些应用场景下显得不那么高效。

相比之下,Docker 作为一种系统层面的虚拟化技术,通过在宿主机的操作系统内核上直接运行容器,实现了轻量级的虚拟化。这种方法不仅资源占用小、启动速度快,而且简化了应用的部署和管理过程,为软件的持续开发和快速迭代提供了强大的支持。Docker 的隔离性虽然不及传统虚拟机,但对于大多数开发和生产环境已经足够。

总的来说,Docker与虚拟机技术各有优势和适用场景。在选择适合的技术时,开发者和系统管理员应根据具体需求、资源限制和安全要求来做出决策。随着容器技术的不断成熟和发展,Docker及其生态系统将继续在云计算、微服务架构、持续集成/持续部署(CI/CD)等领域发挥重要作用,推动软件开发和运维的现代化进程。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从 Flask 切到 FastAPI 后,起飞了!

我这几天上手体验 FastAPI,感受到这个框架易用和方便。之前也使用过 Python 中的 Django 和 Flask 作为项目的框架。Django 说实话上手也方便,但是学习起来有点重量级框架的感觉,FastAPI 带给我的直观体验还是很轻便的,本文就会着…

LeetCode34.在排序数组中查找元素的第一个和最后一个位置

题目 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 输入…

尚硅谷Java数据结构--希尔排序

插入排序的问题🎈: arr{2,3,4,5,6,0,9,7,8}; 当0作为插入元素的时候,其待插入下标与原下标相差很远,需要进行多次比较和移动。 希尔排序则是先将下标相差一定距离gap的元素分为一组,进行插入排序;再逐渐将距…

Flutter(四):SingleChildScrollView、GridView

SingleChildScrollView、GridView 遇到的问题 以下代码会报错: class GridViewPage extends StatefulWidget {const GridViewPage({super.key});overrideState<GridViewPage> createState() > _GridViewPage(); }class _GridViewPage extends State<GridViewPage&g…

Maven下载、安装、配置教程

maven是一个项目管理的工具&#xff0c;maven自身是纯java开发的&#xff0c;可以使用maven对java项目进行构建、依赖管理。 通常我们靠手动下载jar包引入项目中是非常浪费时间的&#xff0c;我们可以通过maven工具帮我们导入jar包提高开发效率。 第一步&#xff1a;下载Mave…

Docker技术概论(3):Docker 中的基本概念

Docker技术概论&#xff08;3&#xff09; Docker 中的基本概念 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://…

vivo 在离线混部探索与实践

作者&#xff1a;来自 vivo 互联网服务器团队 本文根据甘青、黄荣杰老师在“2023 vivo开发者大会"现场演讲内容整理而成。 伴随 vivo 互联网业务的高速发展&#xff0c;数据中心的规模不断扩大&#xff0c;成本问题日益突出。在离线混部技术可以在保证服务质量的同时&…

【探索AI】十二 深度学习之第2周:深度神经网络(一)深度神经网络的结构与设计

第2周&#xff1a;深度神经网络 将从以下几个部分开始学习&#xff0c;第1周的概述有需要详细讲解的的同学自行百度&#xff1b; 深度神经网络的结构与设计 深度学习的参数初始化策略 过拟合与正则化技术 批标准化与Dropout 实践&#xff1a;使用深度学习框架构建简单的深度神…

红队基础设施建设

文章目录 一、ATT&CK二、T1583 获取基础架构2.1 匿名网络2.2 专用设备2.3 渗透测试虚拟机 三、T1588.002 C23.1 开源/商用 C23.1.1 C2 调研SliverSliver 对比 CS 3.1.2 CS Beacon流量分析流量规避免杀上线 3.1.3 C2 魔改3.1.4 C2 隐匿3.1.5 C2 准入应用场景安装配置说明工具…

安卓cpu内存监控,大厂首发

开头 很多人工作了十年&#xff0c;但只是用一年的工作经验做了十年而已。 高级工程师一直是市场所需要的&#xff0c;然而很多初级工程师在进阶高级工程师的过程中一直是一个瓶颈。 移动研发在最近两年可以说越来越趋于稳定&#xff0c;因为越来越多人开始学习Android开发&…

适用Java SpringBoot项目的分布式锁

在分布式系统中&#xff0c;常用到分布式锁&#xff0c;它有多中实现方式&#xff0c;如&#xff1a;基于redis&#xff0c;database&#xff0c;zookeeper等。Spring integration组件有这三种服务的分布式锁实现&#xff0c;今天来看看用的比较多的redis和database实现方式。 …

回溯 Leetcode 37 解数独

解数独 Leetcode 37 学习记录自代码随想录 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&…

如何解决机器视觉高速图像处理软件的加密需求?

高速图像处理在机器视觉中的应用重要性 在机器视觉行业中&#xff0c;高速图像处理软件的作用至关重要&#xff0c;它使得机器能够迅速分析和处理成千上万的图像数据。这种能力在制造业、安防系统、交通监控等多个领域发挥着核心作用&#xff0c;如在制造业中&#xff0c;高速…

获取PDF中的布局信息——如何获取段落

PDF解析是极其复杂的问题。不可能靠一个工具解决全部问题&#xff0c;尤其是五花八门&#xff0c;格式不统一的PDF文件。除非有钞能力。如果没有那就看看可以分为哪些问题。 提取文本内容&#xff0c;提取表格内容&#xff0c;提取图片。我认为这些应该是分开做的事情。python有…

基于大模型思维链(Chain-of-Thought)技术的定制化思维链提示和定向刺激提示的心理咨询场景定向ai智能应用

本篇为个人笔记 记录基于大模型思维链&#xff08;Chain-of-Thought&#xff09;技术的定制化思维链提示和定向刺激提示的心理咨询场景定向ai智能应用 人工智能为个人兴趣领域 业余研究 如有错漏欢迎指出&#xff01;&#xff01;&#xff01; 目录 本篇为个人笔记 记录基…

跨时钟信号处理方法

1. 背景 现在的芯片&#xff08;比如SOC&#xff0c;片上系统&#xff09;集成度和复杂度越来越高&#xff0c;通常一颗芯片上会有许多不同的信号工作在不同的时钟频率下。比如SOC芯片中的CPU通常会工作在一个频率上&#xff0c;总线信号&#xff08;比如DRAM BUS&#xff09;会…

MCBPS配置成SPI

MCBPS配置成SPI 典型的SPI接口 McBSP作为SPI主机 以McBSP为主的SPI接口如图所示。当McBSP被配置为主控器时,发送输出信号(DX)被用作SPI协议的SPISIMO信号,并且接收输入信号(DR)被用作SPISOMI信号。 表列出了将McBSP配置为主控器所需的寄存器位值。下表是有关配置要求…

性能测试-反编译jar

方法一&#xff0c;使用jd-gui 1、官网下载&#xff1a;Java Decompiler 2、下载mac版本后&#xff0c;解压&#xff0c;如下所示&#xff1a; 双击 JD_GUI&#xff0c;提示错误&#xff0c;如下所示&#xff1a; 已经安装了java 17&#xff0c;是java 1.8以上版本&#xff0…

sheng的学习笔记-卷积神经网络经典架构-LeNet-5、AlexNet、VGGNet-16

目录&#xff1a;目录 看本文章之前&#xff0c;需要学习卷积神经网络基础&#xff0c;可参考 sheng的学习笔记-卷积神经网络-CSDN博客 目录 LeNet-5 架构图 层级解析 1、输入层&#xff08;Input layer&#xff09; 2、卷积层C1&#xff08;Convolutional layer C1&…

Day06:基础入门-抓包技术HTTPS协议APP小程序PC应用WEB转发联动

目录 HTTP/HTTPS协议抓包工具 Web浏览器抓包 APP应用抓包 WX小程序&PC应用抓包 思维导图 章节知识点&#xff1a; 应用架构&#xff1a;Web/APP/云应用/三方服务/负载均衡等 安全产品&#xff1a;CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令&#xff1a;文件上传下载…
最新文章