当前位置: 首页 > news >正文

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)等领域发挥重要作用,推动软件开发和运维的现代化进程。

相关文章:

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

Docker技术概论(1) Docker与虚拟化技术比较 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https:…...

alibabacloud学习笔记07(小滴课堂)

讲解Sentinel自定义异常降级-新旧版本差异 讲解新版Sentinel自定义异常数据开发实战 如果我们都使用原生的报错,我们就无法得到具体的报错信息。 所以我们要自定义异常返回的数据提示: 实现BlockExceptionHandler并且重写handle方法: 使用F…...

Ansible-Playbook

目录 1、概念介绍 roles 角色 playbook 核心元素 ansible-playbook 命令 playbook 简单案例 2、Ansible 变量 自定义变量 facts 变量 Palybook 部署 LAMP ansible 端安装 LAMP playbook 系统环境脚本 构建 httpd 任务 构建 mariadb 任务 构建 php 任务 编写整个任务…...

UE5常见问题处理笔记

一、C工程中的文件出现很多头文件找不到,比如:#include CoreMinimal.h文件提示找不到。 解决方法:在UE编辑器中选择菜单Tools -> Refresh Visual Studio Project。 二、莫名其妙的编译错误。 解决方法,找到工程根目录下的Bi…...

docker中hyperf项目配置虚拟域名

在学习hyperf框架时遇到一些问题,这里是直接用了docker环境 下载镜像运行容器 docker run --name hyperf -v /data/project:/data/project -p 9501:9501 -itd -w /data/project --privileged -u root --entrypoint /bin/sh 镜像ID配置docker-compose.yml version…...

PID闭环控制算法的学习与简单使用

平台:matlab2021b,Vivado2018 应用场景和理解 一个早餐店,假如一天都有生意,生意有的时间很火爆,有时候又一般,老板又是个实在人,只知道在后厨蒸包子。由于包子蒸熟需要一定的时间,老…...

【无刷电机学习】光耦HCNR200基本原理及应用(资料摘抄)

【仅作自学记录,不出于任何商业目的。如有侵权,请联系删除,谢谢!】 本文摘抄翻译自: https://docs.broadcom.com/wcs-public/products/application-notes/application-note/331/6/av02-1333en-an_5394-16jul10.pdfhtt…...

【LeetCode】1768_交替合并字符串_C

题目描述 给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 https://leetcode.cn/problems/merge-strings-al…...

C#解析JSON

https://blog.csdn.net/weixin_43046974/article/details/131449900 C#解析JSON 1. JSON定义2. JSON一般构成及解析方法3. 解析举例子 1. JSON对象解析,只包含一层对象{}2. 嵌套JSON对象解析,包含多层对象{}3. JSON数组解析1(数组循环遍历&…...

AI图像识别算法助力安全生产*提升风险监测效率---豌豆云

2024年开年来安全生产事故频发,工厂爆炸、工程坍陷等重大安全生产事故的发生再次为我们敲响了警钟。 安全生产是企业发展的生命线,而传统的安全监测手段存在盲区和延迟,难以及时发现和应对潜在风险。 AI图像识别算法通过利用先进的计算机视…...

CSS技巧:实现两个div在同一行显示的方法

css如何让两个div在同一行显示 - web开发 - 亿速云 在Web开发中,经常遇到需要将多个元素水平排列在同一行的情况。其中一个常见的需求是将两个div元素放置在同一行上,使它们并排显示。在本文中,我们将介绍几种实现这一效果的CSS方法。 1. 使…...

【Unity】Node.js安装与配置环境

引言 我们在使用unity开发的时候,有时候会使用一些辅助工具。 Node.js就是开发中,经常会遇到的一款软件。 1.下载Node.js 下载地址:https://nodejs.org/en 2.安装Node.js ①点击直接点击Next下一步 ②把协议勾上,继续点击…...

Vue3:使用 Composition API 不需要 Pinia

在 Vue.js 开发的动态环境中,在单个组件中处理复杂的业务逻辑可能会导致笨重的文件和维护噩梦。虽然 Pinia 提供集中式状态管理,但仅依赖它来处理复杂的业务逻辑可能会导致代码混乱。本文探讨了使用 Composition API 的替代方法,说明开发人员…...

ExoPlayer 播放视频黑屏的解决方法

最近项目中在使用 ExoPlayer 来进行视频的播放,开发过程中遇到了部分视频打开后黑屏的问题,报错日志如下。 E Audio codec error android.media.MediaCodec$CodecException: Error 0xe E Playback error androidx.media3.exoplayer.ExoPlaybackExcept…...

C语言初阶—数组

数组是一组相同类型元素的集合。 在C99标准之前,数组的大小必须是常量或常量表达式。 在C99标准之后,数组的大小可以是变量,可以支持变长数组,但变长数组不能初始化。 不完全初始化,剩余的元素默认初始化为0 。 数组访…...

飞桨(PaddlePaddle)数据预处理教程

文章目录 飞桨(PaddlePaddle)数据预处理教程1. 安装飞桨2. 了解飞桨的数据预处理方法3. 应用单个数据预处理方法4. 组合多个数据预处理方法5. 在数据集中应用数据预处理5.1 在框架内置数据集中应用5.2 在自定义数据集中应用 6. 总结 飞桨(Pad…...

MYSQL C++链接接口编程

使用MYSQL 提供的C接口来访问数据库,官网比较零碎,又不想全部精读一下,百度CSDN都是乱七八糟的,大部分不可用 官网教程地址 https://dev.mysql.com/doc/connector-cpp/1.1/en/connector-cpp-examples-connecting.html 网上之所以乱七八糟,主要是MYSQL提供了3个接口两个包,使用…...

并发编程中常见的设计模式,c++多线程如何设计

C多线程设计(任务的“多对一”、“一对多”、“多对多”情况 该如何设计线程?) C书籍中并未找到对多线程设计,有很完整详细的总结!!C并发编程书籍中也只是一些理论或则零散的多线程实例。无奈,…...

解决android studio build Output中文乱码

1.效果如下所示: 代码运行报错的时候,Build Output报的错误日志中中文部分出现乱码,导致看不到到底报的什么错。 2.解决办法如下: 点击Android studio开发工具栏的Help-Edit Custom VM Options....,Android studio会…...

[云原生] K8s之pod进阶

一、pod的状态说明 (1)Pod 一直处于Pending状态 Pending状态意味着Pod的YAML文件已经提交给Kubernetes,API对象已经被创建并保存在Etcd当中。但是,这个Pod里有些容器因为某种原因而不能被顺利创建。比如,调度不成功(…...

华为云AI开发平台ModelArts

华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

NFT模式:数字资产确权与链游经济系统构建

NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

日常一水C

多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...

Ray框架:分布式AI训练与调参实践

Ray框架:分布式AI训练与调参实践 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 Ray框架:分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …...