docker基础-虚拟化与容器介绍

正如全部关心docker技术的人所知道的那样,docker是以容器虚拟化为技术为基础的软件,所以在学习docker具体的内容以前,有必要讨论一下虚拟化和容器技术。docker

虚拟化技术:
  在了解虚拟化技术时,各位同窗能够以本身机器上运行的虚拟机做为原型,方便理解。
  一句话来描述虚拟化技术,就是把真实的计算机硬件资源(内存、CPU、网卡等)经过虚拟化技术虚拟化成虚拟的计算机资源供程序运行使用。性能

虚拟化为应用程序跨平台而生的:学习

  在计算机技术发展的早期,各种计算平台、计算资源所提供的接口、调用方式十分杂乱,没有像今天这样相对统一的标准。因为要适配不一样的平台,写各类兼容代码,这无形给开发者带来了不少的困扰。这种混乱甚至都出如今 IBM 这一家公司下不一样机型的机器上,因此 IBM 的工程师们创造了虚拟化技术,用来帮助程序快速适配不一样平台的物理机器。spa

  熟悉计算机原理的朋友应该知道,程序对计算机资源的调用主要依赖于操做系统所给出的接口。咱们的程序经过操做系统提供的接口,向物理硬件发送指令。虚拟化技术正是经过其自己适配不一样平台的硬件,而加以抽象成统一的接口,来实现程序跨平台运行这一目的的。操作系统

将虚拟化应用于资源管理:
  docker的原理其实和这个差很少,只不过docker牺牲了跨平台来解决虚拟技术的效率问题。
  将虚拟化用于资源管理的道理其实并不复杂,虚拟化技术自己就是抽象计算机的物理资源进而加工成虚拟的计算资源的,它天然很容易从中作“手脚”,来告诉应用程序一些虚假的资源数据。例如,咱们只要告诉程序计算机只有 4GB 内存,那么无论真实的物理机是 8GB、16GB 仍是 32GB,应用程序都会按照 4GB 这个虚假的值来处理它的逻辑。接口

  经过虚拟化技术来管理计算机资源的方式,不但让咱们对计算机资源的控制变得更加灵活,也大幅提升了计算机资源的使用率(注意:这里是提升计算机资源使用率,而非减小程序资源的占用率,)。图片

虚拟化的分类:
  硬件虚拟化:
    硬件自己更支持虚拟化。举个例子来讲,某个平台的 CPU,可以将另一个平台的指令集转换为自身的指令集执行,并给程序彻底运行在那个平台上的感受。又或者说,CPU 可以自身模拟裂变,让程序或者操做系统认为存在多个CPU,进而可以同时运行多个程序或者操做系统。这些都是硬件虚拟化的体现。
  软件虚拟化:
    软件虚拟化则指的是经过软件的方式来实现虚拟化中关键的指令转换部分。依然用 CPU 的例子来讲话,在软件虚拟化实现中,经过一层夹杂在应用程序和硬件平台上的虚拟化实现软件来进行指令的转换。也就是说,虽然应用程序向操做系统或者物理硬件发出的指令不是当前硬件平台所支持的指令,这个实现虚拟化的软件也会将之转换为当前硬件平台所能识别的。内存

容器:
  容器技术是一种全新意义上的虚拟化技术,按分类或者实现方式来讲,其应该属于操做系统虚拟化的范畴,也就是在由操做系统提供虚拟化的支持。资源

  所谓容器技术,指的是操做系统自身支持一些接口,可以让应用程序间能够互不干扰的独立运行,而且可以对其在运行中所使用的资源进行干预。固然,目前来讲容器技术尚未一个严格的定义,其实现方式也各有不一样,因此这里只能算是个人一点小小总结概括。开发

  因为应用程序的运行被隔离在了一个独立的运行环境之中,这个独立的运行环境就好似一个容器,包裹住了应用程序,这就是容器技术名字的由来。

  容器技术近年来已是一个火遍大江南北的概念了,其之因此能名声大噪,很重要的一个缘由是其在运行性能上要远超虚拟机等其余虚拟化实现。更甚一步说,运行在容器虚拟化中的应用程序,在运行效率上与真实运行在物理平台上的应用程序不相上下。

  为何容器技术可以造就近乎完美的运行效率呢?这就得从容器技术如何实现应用程序的指令转换开始提及。下面这张图展现了容器技术如何进行指令转换的。

  ...

  实在无奈,没有找到容器技术进行指令转换的图片,由于容器技术压根没有作指令转换。是的,你没有听错,有时候解决问题的最佳方法就是不解决它。

  因为没有指令转换,运行在容器中的应用程序自身必须支持在真实操做系统上运行,也就是必须遵循硬件平台的指令规则。

  不少同窗这时候就有疑问了,指令都不转换,也没有解决程序跨平台兼容的问题,这算哪门子虚拟化技术。

  没错,正是这种缘由,不少人并不认同容器技术属于虚拟化技术的范畴。不过另外一派观点认为,容器技术提供了相对独立的应用程序运行的环境,也提供了资源控制的功能,因此咱们依然能够概括其为一种实现不彻底的虚拟化技术。

相关文章
相关标签/搜索