点赞
评论
收藏
分享
举报
【技术学习】容器和虚拟机的区别
发表于2023-03-06 13:51

浏览 527

文章标签

容器和虚拟机的区别


一、容器


容器是一个不依赖于操作系统,运行应用程序的环境。它通过Linux的Namespaces和Cgroups技术对应用程序进程进行隔离和限制的,Namespace的作用是隔离,它让应用进程只能看到该Namespace内的世界;而Cgroups 的作用是限制分配给进程的宿主机资源。但对于宿主机来说,这些被“隔离”了的进程跟其他进程并没有太大区别。容器只是运行在宿主机上的一种特殊的进程,多个容器之间使用的还是同一个宿主机的操作系统内核。


二、虚拟机


虚拟机(VM)是计算机系统的仿真。简而言之,它可以在实际上是一台计算机的硬件上运行看起来很多单独的计算机。
操作系统(OS)及其应用程序从单个主机服务器或主机服务器池共享硬件资源。每个虚拟机都需要自己的底层操作系统,并且硬件是虚拟化的。管理程序或虚拟机监视器是创建和运行虚拟机的软件,固件或硬件。它位于硬件和虚拟机之间,是虚拟化服务器所必需的。



三、容器和虚拟机的区别


1、容器与虚拟机拥有着类似的使命:对应用程序及其关联性进行隔离,从而构建起一套能够随处运行的自容纳单元。此外,容器与虚拟机还摆脱了对物理硬件的需求,允许我们更为高效地使用计算资源,从而提升能源效率与成本效益。


2、虚拟机会将虚拟硬件、内核(即操作系统)以及用户空间打包在新虚拟机当中,虚拟机能够利用“虚拟机管理程序”运行在物理设备之上。虚拟机依赖于hypervisor,其通常被安装在“裸金属”系统硬件之上,这导致hypervisor在某些方面被认为是一种操作系统。一旦 hypervisor安装完成, 就可以从系统可用计算资源当中分配虚拟机实例了,每台虚拟机都能够获得唯一的操作系统和负载(应用程序)。简言之,虚拟机先需要虚拟一个物理环境,然后构建一个完整的操作系统,再搭建一层Runtime,然后供应用程序运行。

3、对于容器环境来说,不需要安装主机操作系统,直接将容器层安装在主机操作系统之上。在安装完容器层之后,就可以从系统可用计算资源当中分配容器实例了,并且企业应用可以被部署在容器当中。但是,每个容器化应用都会共享相同的操作系统(单个主机操作系统)。容器可以看成一个装好了一组特定应用的虚拟机,它直接利用了宿主机的内核,抽象层比虚拟机更少,更加轻量化,启动速度极快。

4、相比于虚拟机,容器拥有更高的资源使用效率,因为它并不需要为每个应用分配单独的操作系统——实例规模更小、创建和迁移速度也更快。这意味相比于虚拟机,单个操作系统能够承载更多的容器。云提供商十分热衷于容器技术,因为在相同的硬件设备当中,可以部署数量更多的容器实例。此外,容器易于迁移,但是只能被迁移到具有兼容操作系统内核的其他服务器当中,这样就会给迁移选择带来限制。

已修改于2023-03-06 13:52
本作品系原创
创作不易,留下一份鼓励
为什么不ban猛犸

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
为什么不ban猛犸
这家伙很懒还未留下介绍~
2
文章
1
问答
0
粉丝
相关文章
原文作者:ScottvanKalken原文链接:Namespace和Cgroup的简介及其工作原理-NGINX转载来源:NGINX官方网站本文是容器技术系列文章的一部分:  Namespace和cgroup简介及其工作原理(本文)构建小型容器镜像我最近一直在研究开源多语言应用服务器 NGINXUnit。在研究中,我注意到Unit同时支持namespace和cgroup这两项进程隔离的特性。本文将介绍这两大构成容器基础的Linux技术。  容器及相关工具(例如Docker和 Kubernetes)出现有一段时间了。它们改变了现代应用环境中软件的开发和交付方式。容器可支持软件在各自的隔离环境中快速部署和运行,而无需用户构建单独的虚拟机(VM)。  大多数人可能很少考虑容器的工作基础,但我认为,了解底层技术很重要,因为这有助于我们制定决策。另外,就我个人而言,能够彻底弄清事物的工作原理令我心情舒畅!什么是Namespace?Namespace作为Linux内核
点赞 0
浏览 1.3k
原文作者:ScottvanKalken原文链接:构建更小的容器镜像-NGINX转载来源:NGINX官方网站本文是我们容器技术系列文章的一部分:  Namespace和cgroup简介及其工作原理构建更小的容器镜像(本文)容器在现代应用环境中无处不在。开发人员正在以多种方式使用它们:构建容器,将它们推送到仓库,然后让应用在容器中运行。在本文中,我将会探讨有关容器镜像的内容,具体就是如何让容器镜像变得更小,以及这样做有何意义。同时,我将展示一些示例代码和命令,它们可构建一个极小的容器镜像(用于测试)。什么是容器镜像?我看过有关容器镜像的最好定义是:    镜像存在无需容器,但容器需要运行镜像才能存在。这似乎有点绕,但描述的非常准确。容器镜像是包含应用代码的运算对象,通过容器运行时(如Docker、rkt和podman)来“运行”。Kubernetes是最流行的容器编排系统,但如果您正在进行本地开发,则会用到上面提到的其他三个工具。镜像定义部署应用的方式——例如,要公开哪些端口、应用运行时启动(或入口点
点赞 0
浏览 1.5k
原文作者:陶辉 原文链接:课程实录 | 从 0 搭建高可用 Wordpress 博客(上) 转载来源:NGINX 开源社区 编者按——本文为系列课程《在 K8s 中用好 NGINX 》的第一节《从
点赞 1
浏览 678