 如今,网络上对容器和虚拟机的比较很常见。 理论上,正如大多数人所言,容器比虚拟机更好,甚至虚拟机会被彻底淘汰!  但是,容器和虚拟机并不一定要站在对立面互相开撕,毕竟容器目前存在的很多问题并没有彻底解决,虚拟机的启动速度和内存开销也未必落后于容器。 因此,如果处于初级入门阶段,有必要认真了解容器和虚拟机的区别,以便做出更优选择?  开始之前,我们先想想应用程序在真实计算机环境中的运行情况。 假设,我们需要运行MySQL数据库、Nodejs应用程序和MongoDB数据库三个应用程序; 真实的计算机环境需要配备服务器,这是运行操作系统的物理设备; 主机操作系统,在服务器上运行的操作系统,比如可以选择LinuxUbuntu;  如果希望应用彼此隔离,每个程序都有自己的操作系统,可以在LinuxFedora上运行MySQL、在LinuxUbuntu上运行Nodejs并在Windows上运行MongoDB。 如果不依靠虚拟机和容器,这个过程需要用三台计算机实现,彼此之间还需要互相通信? 虚拟机这种方式既不友好也不科学,虚拟机和容器的出现解决了这些问题。  相较而言,虚拟机历史更久远,用户也更加熟悉。 简单来说,虚拟机通过虚拟化来模拟真实计算环境,以执行在真实计算机上运行的应用程序! 优缺点虚拟机的优点是可创建完全隔离的环境并实现完全虚拟化,每个虚拟机都有对应的CPU虚拟化?  其缺点也很明显,重,虚拟机通常在繁重的隔离进程中执行,因为需要GuestOS。 性能一般,当虚拟机无法直接访问硬件(托管的虚拟机管理程序)时,需要在拥有一个层,这会明显降低性能; 研究进展在理论层面,neclab的研究学者已经把虚拟机的启动速度做到比Docker还快,并且内存开销比Docker更低,这些成果以paper形式发表在SOSP’17上;  长期以来,由于虚拟机需要完整的操作系统,所以体积比较大,如果想优化速度必须精简操作系统。 论文作者提供了两种方法:一是Unikernels,这种方法相对极端,简单来说是为应用专门定制操作系统内核,该内核只提供运行此服务最基本的功能!  二是精简Linux内核只保留必要功能和模块,作者专门开发了Tinyx工具,根据应用objdump信息自动寻找依赖,并根据启发性测试不断寻找可关闭linux模块。 这种方式不仅可以缩小镜像体积(与启动速度最相关的因素),还可以降低占用内存! 容器简单来说,容器是与主机共享资源的独立进程?  与虚拟机不同,容器不会虚拟化硬件,也不需要客户操作系统。  在容器中,运行应用程序所需的必要组件都打包为单个映像,可重复使用。 执行映像时,它在隔离环境中运行,不共享内存、CPU或主机操作系统磁盘。  这可以保证容器内的进程无法监视容器外的任何进程。 优缺点容器的优点是由隔离进程执行但可与同一主机上的其他容器共享资源环境? 允许将容器内部的文件和资源安装到外部?  容器不在客户操作系统中运行,因此其过程是轻量级的,具有更好的性能,并可在几秒钟内启动。  容器的缺点有相同的HostOS,当应用程序需要特定的操作系统并且使用虚拟机更容易实现时,我们可能会遇到这种情况。 安全问题,容器相当于彼此隔离的进程,可以直接访问重要的命名空间,比如主机名、网络和共享内存。 当然,这一点可以通过控制root用户有所缓解,但始终是个问题。 容器VS虚拟机从舆论层面来看,我们似乎应该放弃虚拟机,毕竟不少媒体已经开始使用“虚拟机已死”的言论; 但就可维护性而言,虚拟机的动态迁移等技术相对成熟,实现原理从根上就很简单,不需要操心少个依赖进程的内存没过去。  所以,我们无法孤立分析二者的好坏,需要结合应用特点、解决问题和场景等因素选择。 实际上,容器诞生之初更多的目的是解决裸进程的隔离和部署问题,并不是冲着取代虚拟机; 目前还有不少人选择应用虚拟机,如果场景和需求合适,也不妨将虚拟机和容器一起使用,比如,生产环境使用Windows,但有一个仅在Linux上运行的应用程序,此时可以使用虚拟机运行Linux发行版,然后在此虚拟机中运行容器!  当然,这件事情现在似乎也由云厂商代做了。  前不久,AWS开源Firecracker,这其实可以算是是容器和虚拟化优势结合的产物,专门用于创建和管理多租户容器以及基于函数的服务,利用传统虚拟机提供的安全性和工作负载隔离,同时兼具容器的资源效率。  不少人认为这可能是未来虚拟机和容器的发展方向,今年可能会看到更多云计算厂商推出此类服务。  “虚拟化是表示计算机资源的逻辑组(或子集)的过程,这样就可以用从原始配置中获益的方式访问它们[2]虚拟网络移动虚拟化编辑虚拟网络什么是移动虚拟化企业虚拟化与移动虚拟化之间相应的有所区别准虚拟化与完全虚拟化相比优点明显,以至于微软和VMware都在开发这项技术,以完善各自的产品移动虚拟化与桌面虚拟化一样,都是利用虚拟机管理程序对基础设备的硬件进行虚拟,创建平行的(虚拟化)协议栈,以便同时运行多个操作系统。 虚拟机管理程序(hypervisor)是一种能允许多个操作系统同时运行在一台主机设备上的软件。 主要有两种类型:裸机虚拟化(Type1):Type1移动虚拟机管理程序会在主机移动硬件上直接运行,并能直接访问硬件资源!  Type1移动虚拟机管理程序可以承载和监控多个客户操作系统。  由于Type1型移动虚拟机管理程序可以直接控制硬件,每个虚拟操作系统的性能都可进行优化。 此外,客户操作系统彼此之间完全隔离。 一个客户操作系统的安全漏洞不会影响到其它操作系统? 托管虚拟化(Type2):Type2移动虚拟机管理程序会在一台主机的移动操作系统环境内运行? 因此,Type2移动虚拟机管理程序运行在第二软件层级(在托管的操作系统之上),而客户操作系统则会运行在第三层级(在Type2移动虚拟机管理程序之上)!  由于Type2型移动虚拟机管理程序在托管的OS上运行,安装该虚拟机管理程序和客户虚拟机操作系统就如同安装应用程序一样方便。 但客户机操作系统的性能在很大程度上依赖于主机操作系统? 此外,由于客户机操作系统对主机操作系统的依赖,这一妥协方案可能会出现主机操作系统失效导致客户机操作系统失效的情况; 上海达龙信息科技有限公司;  检查cpu的指令集是否包含pae,这个应该不成问题,我小黑的cpu是T2370都支持。 1.先dd出一个img文件作为虚拟机的安装空间ddif=/dev/zeroof=/xen/image/xen1.imgbs=1Mcount=30720数值大小可以根据自己需要调整; 2.接着就是安装虚拟机了,安装方式跟宿主机安装一样,可以采取光驱,网络,由于我已经建好了ks的源,方便期间我就采用ks来安装虚拟机的系统; 执行如下命令:virt-install-nxen1-r256-p--nographic-f/xen/images/xen1.img-l/192.168.32.132/centos32bit/ksxen.cfg成功的话就会自动安装完系统,直到重启进入系统;  ks文件就不贴了,和宿主机的配置文件基本一样需要做调整的是分区的名字,宿主机是类似sda的形式,而虚拟机是类似xvda的形式。 那些控制xen的基本命令也不说了,网上一大堆,建议看下官方的xen+man.pdf这本书,很详细!
|