容器 VS 虚拟机:区别 差异 不同(*****)

107 篇文章 0 订阅

容器 VS 虚拟机  https://www.redhat.com/zh/topics/containers/containers-vs-vms

什么是 Linux 容器?https://www.redhat.com/zh/topics/containers/whats-a-linux-container   

什么是容器编排?https://www.redhat.com/zh/topics/containers/what-is-container-orchestration 

什么是 Podman?https://www.redhat.com/zh/topics/containers/what-is-podman 

------------------------------------------------------------------

要点:

1. 虚拟机自成一体,独立运行,可以在虚拟机内部完成通用操作系统的整个循环过程。既有动态的运行过程,也有静态的文件及目录。

容器,虽然在容器的内部,文件的目录结构可以与虚拟机 Linux系统、或真实的 Linux 系统一样。但是,不能自成系统,也就是容器内部无法形成主动的操作系统的的运行过程。

比如?:将 Linux 的定时运行任务设置,直接拷贝到容器中对应的目录位置,是不可运行的?

假如将整个操作系统看作是一个 while(1) 循坏,在容器内部,是无法形成像操作系统那样,自成一体的 while(1) 循坏运行的?

要想在容器内部实现任务的定时运行,由于仅、只在容器内部是无法 while(1) 循坏的。因此,需要由容器外部来控制定时任务的运行。

对于 Linux OS 而言,这是一个自成一体的运行系统。Linux OS 通过常规的启动流程,在启动过程中,是会运行到 rc.local 这个自动启动配置文件的。但是,在容器中,它们的运行流程变了;在容器内部,不再具有自运行的能力,因为从容器外部来看,容器内部只不过就是打包了各种文件、目录、环境变量、可写层文件系统的 文件与软件的集合,这里面的 app 运行,依赖于容器的外部,以及容器内部的 app。容器内部的 app 运行流程,不再像 在 Linux OS那样,可以自成系统地 while(1) 循坏运行。

本质上,整个容器只不过是一个大的软件包集合、可以包含环境变量配置、以及自带了一个文件系统(读写层)而已。无法像虚拟机那样,可以自成系统,与宿主机无关,独立运行。

在容器里面的文件,可以看成是全静态的,并包含、具有读写的文件系统。

在容器里的 app ,由于被视为是静态的?

  • 所以无法自成一体地完成操作系统的运行功能。他需要已付容器引擎来运行。

与 Appimagetool 相比,是类似的;当然,容器的存取文件系统除外。

 Appimagetool 打包的特点:将与 app 运行有关的库,总是试图全部提取出来,与 app 放在同一个目录下。

容器:无需提取,目录结构保持 Linux OS 原有的方式。但是,还可以包含:

  • 与 App 运行无关的东西,比如 bin 目录下的命令,环境变量等等。

 Appimagetool app 打包 与 在容器中的 app,在主要的、主体的部分的、表现上都是一样的“

  • 都属于 静态文件和目录的集合。
  • 只不过容器所包含的东西,可以更多,更复杂。
  •  打包了的 Appimagetool app,只是包含了能够让 app 运行的最小集合。
    相比之下,容器不仅包含了能够让 app 运行的最小集合,还包含了可写层文件系统,以及其他的系统指令,或者程序。但本质上,它们只不过是静态的程序、文件、目录、文件系统的集合,甚至是巨集。
  • 在容器内部,还可以安装新的 app。这点类似于虚拟机,但它与 python 的虚拟环境更加的类似。
  • 与虚拟机相比,容器更像 python 的虚拟环境;但可以包含比虚拟环境更加丰富的东西。
    容器能够正确运行,还依赖于在宿主机中的配置文件,以及容器引擎。
    而 python 的虚拟环境,对宿主机的依赖很小,主要是如环境变量。

共同点:

运行表现:类似的,都体现为静态软件包。

容器与虚拟机的区别

容器的运行,需要容器引擎,以及在宿主机中的相关配置文件的配合。整个容器、可以看作?就是一个如同 Appimagetool 打包好的 app 软件;它的正确运行,还需要在操作系统中的有关配置、设置文件的配合与支持。它们不像虚拟机系统那样,可以独立运行。

容器本身,是没有自主产生能够让系统运行的时钟嘀嗒的。由宿主机的提供。

  • 在虚拟机中,定时任务,类似于 MCU 中的中断执行,是会在虚拟机 OS 的操纵之下,自动执行的。
  • 在容器内部,定时任务是无法自主实现的,依赖于容器外部的操控;或者是由容器外部所操控的、容器内部运行的 app 的控制。

实际上,如果抛开硬件性能,使用虚拟机比容器更舒服。

但是,在有限的硬件性能之下,使用容器的速度更快;

在同等条件之下,同一台机器能够容纳得下更多的容器。

通过容器编排,可以同时协同处理更多,更复杂的任务。

容器与python 的虚拟环境的区别

与虚拟机相比,容器更像是 python 的虚拟环境。

与 python 的虚拟环境相比,在容器的内部,目录和文件与 Linux OS发行版的目录和文件名,只要是有的,都是是一样的。

在容器内部的目录和文件,只是 Linux OS发行版目录和文件名的一个子集,

共同点:

  • 没有时钟滴答。
  • 都可能安装新的 app。
  • 本质上,都只是静态的程序集合。只不过容器可以包含更丰富的东西。
  • 都可以跨发行版、跨平台。

不同点:

  • 虚拟环境,要比容器引擎要轻量得多。
  • 容器与宿主机的交互、耦合度,更强。
对比
  • Py 虚拟环境 === 容器引擎
  • 在虚拟环境中的 python === 基础镜像
  • 在 Py 虚拟环境中安装的 app  === 在基础镜像中安装的 app
  • 容器的隔离性好:也可以适合在服务器场景里使用。
    包括独立的可写层。

思考:?

不同版本的基础容器镜像,类似于不同版本的基础容器镜像。主要不同是容器有可写层,可隔离运行。

学习容器的基础思想

在原理上

  • 采用与python 虚拟环境类似的思想,来学习容器,可能更接近真相?
  • Appimagetool 的软件打包方法,有一定的类似参考价值。

在使用上

  • 采用 Linux OS 虚拟机的使用方法。

Fedora / Ubuntu 基础容器

概念的定义,太过于不准确了,所以导致了在理解上的困难,或者学习成本的增加。

Fedora / Ubuntu 基础容器:修改定义为 Fedora / Ubuntu 基础虚拟环境

Debian 11 基础虚拟环境:就是基于 debian 11 OS 的、基础的(含基础命令、环境变量配置、可写层文件系统等)的可供 App 运行的虚拟环境。

注意:

  • 容器内部,只是配置环境,因为容器本身只是一个大的 app软件、环境变量、可写层文件系统的巨集。
  • 容器本身,不是可供独立运行操作系统级别的工作环境,主要的、或部分的运行环境存在于容器的外部;如存在于宿主机中。

虽然在这里的定义,似乎还是不够准确,但是,必须直到目前流行的概念定义,也是不够准确的。

======================================

容器 VS 虚拟机

  https://www.redhat.com/zh/topics/containers/containers-vs-vms

概述

容器虚拟机(VM)是封装计算环境的两种方式,其中整合了各种 IT 组件并将其与系统的其他部分隔离开来。二者之间的主要区别在于隔离了哪些组件,这反过来又影响了每种方式的规模和可移植性。

什么是容器?

容器是一个软件单元,可包含应用运行所需的所有组件和功能。大多数现代应用都是由多个容器组成,每个容器负责执行某种特定功能。容器通常以兆字节为度量单位,不使用虚拟机监控程序,且通常被视为更快、更敏捷的进程隔离方式。

容器出色的可移植性,是它广受欢迎的一大重要因素。它与相互拼接的乐高™ 积木很像,您可以轻松换下单个容器并将其移动到不同的环境中。将应用及其依赖项封装到容器中之后,便可以将其部署到任何所需位置:开发人员的笔记本电脑、数据中心、云或边缘,且其功能不会发生任何变化。

Docker 是一个用于构建、部署和管理容器化应用的开源平台,多年来,在容器技术的发展中发挥着重要作用。 

什么是虚拟机?

虚拟机在云计算中发挥着至关重要的作用,它通过在隔离的实例中运行操作系统来模拟物理计算机。多个虚拟机通常托管在单个服务器上,由虚拟机监控程序充当物理主机和虚拟机之间的轻量级软件层。此虚拟机监控程序可高效管理对资源的访问,使虚拟机能够作为不同的服务器运行,同时提高灵活性和敏捷性。

在 2000 年代初期,整合和节约成本的倡议在 IT 领域得到了广泛推广,虚拟机的使用逐渐变得流行起来,随着时间的推移,对虚拟机的使用也在不断演变。企业的虚拟机部署已日趋成熟,不再局限于简单的整合,而是扩展涵盖了各种用途。其中包括按需为应用提供资源,以及优化对 GPU 等昂贵资源的访问。

虚拟机还充当了许多早期云计算环境的基础,用于促进资源虚拟化并支持多租户和隔离,即多个客户所运行的系统使用的是相同的资源。

虚拟机包含自己的操作系统,因此可以同时执行多个需要占用大量资源的功能。由于虚拟机的可用资源大大增加,因此它们可以抽象、拆分、复制和模拟整个服务器、操作系统、台式机、数据库和网络。 

云原生与传统 IT 的对比

除了技术差异之外,容器与虚拟机之间的对比恰恰代表了现代云原生 IT 实践与传统 IT 架构之间的较量。 

新兴 IT 实践
云原生开发、CI/CDDevOps)之所以可行,是因为工作负载被拆分成了很小的服务单元(通常为功能或微服务),并在隔离的环境中运行,可以独立地进行开发、部署、管理和扩展。

这些小单元被完好地封装在容器中,因此,多个团队可以在不中断或威胁其他容器所封装代码的情况下,处理应用或服务的各个部分。

传统的 IT 架构
(老式的单体式架构)在这些架构中,工作负载的各个方面紧密耦合,无法在没有整个架构的支持下运行。由于各方面无法拆分,因此,需要将它们作为一个整体封装到一个更大的环境(通常是虚拟机)中。

在虚拟机中构建和运行整个应用曾经一度司空见惯,但将所有代码和依赖项都放在一个地方会导致虚拟机体量过大,并因此有可能在推送更新时出现级联故障和停机。

它们是如何运作的?

虚拟化

一款称为“虚拟机监控程序”的软件会将资源与所属物理机分开,以便对它们进行分区并使其专用于虚拟机。当用户发出需要物理环境提供额外资源的 VM 指令后,虚拟机监控程序会将请求中继到物理系统并缓存更改。虚拟机的形式和运行方式类似于物理服务器,这会增加应用依赖性和占用大量操作系统空间的缺点,而运行单个应用或微服务大多不需要占用如此多的空间。

容器

容器中的所有内容均通过容器镜像文件(包含所有库和依赖项)封装和交付。容器镜像文件类似于软件安装包(例如 Linux 中的 RPM),但只需具有兼容的内核和容器运行时,应用即可运行,无论创建容器时使用的是哪种操作系统,也无论容器中的库来自何处。由于容器非常小,通常有数百个容器松散地耦合在一起,因此,需要通过容器编排平台(例如红帽 OpenShiftKubernetes)对其进行置备和管理。

我应该使用哪一种?

这取决于您是需要一个可以轻松移动的小型实例(容器),还是需要半永久地分配自定义 IT 资源。

还需要考虑的因素包括应用架构、开发实践、安全性和监管要求。

容器具有规模小、轻量化的特性,因而可轻松部 0署.....到0裸机系统以及公共云、私有云、混合云和多云环境。在虚拟机中运行容器也很常见,因为企业的现有基础架构都是围绕虚拟机构建的。这一点充分体现出容器的灵活性。

此外,容器也是部署当今云原生应用的理想环境,云原生应用是一些微服务的集合,旨在跨公共云私有云混合云多云环境提供一致的开发和自动化管理体验。云原生应用可以加快新应用的构建,促进现有应用的优化,提高应用之间的连接速度。 

与虚拟机相比,容器非常适合用于:

  • 构建云原生应用
  • 封装微服务
  • 将应用纳入 DevOps 或 CI/CD 实践中
  • 在多样化的 IT 环境中移动可扩展的 IT 项目

与容器相比,虚拟机非常适合用于:

  • 存放传统的老式单体式工作负载
  • 隔离存在风险的开发周期
  • 置备基础架构资源(如网络、服务器和数据
  • 在某个操作系统内运行其他操作系统(例如在 Linux 上运行 Unix)

如果您在虚拟机和容器上均有运行的应用,红帽服务互连可以帮您连接不同环境中的应用和服务。

裸机、虚拟机与容器的对比

虚拟机和容器可以部署到各种基础架构上,包括裸机服务器。

什么是裸机?

“裸机”(Bare metal)是指在物理硬件上运行的计算机或服务器,不需要虚拟机监控程序、虚拟机或容器化的辅助即可运行。裸机服务器也称为专用服务器,这是因为硬件组件不与其他用户共享,完全供单个租户专用。

裸机服务器能够以较低的延迟处理大量数据,因此,它速度快、性能强。借助裸机,用户可以完全掌控其服务器基础架构,即可以自行选择操作系统,并对硬件和软件进行微调,以满足其特定的工作负载需求。

但是,虽然裸机部署在非常注重性能和能否直接访问硬件的场景中很有价值,但它们的灵活性和资源管理水平可能无法媲美容器或虚拟机。

是否可以在裸机上托管虚拟机?

可以,裸机服务器可以通过添加虚拟机监控程序和虚拟化软件来托管虚拟机。

是否可以在裸机上托管容器?

可以,Docker、Kubernetes 和 Podman 等平台均旨在帮助用户在包括裸机服务器在内的多种基础架构上大规模管理和部署容器。 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值