写在前面:该小册买过好久,笔记也早就整理好放在幕布上了。现整理在blog中,以便翻阅。
Docker实践指南-笔记:虚拟化与容器技术
虚拟化技术:
- 虚拟化技术是一种将计算机物理资源进行抽象、转换为虚拟的计算机资源提供给程序使用的技术。
- 计算机资源:
- CPU提供的运算控制资源
- 硬盘提供的数据存储资源
- 网卡提供的网络传输资源
- 为程序跨平台兼容而生:
- 程序对计算机资源的调用主要依赖于操作系统给出的接口,向物理硬件发送指令
- 早期各平台、计算资源提供的接口、调用方式杂乱
- IBM创建了虚拟化技术,用来帮助程序快速适配不同平台的物理机器
- 原理:
- 将虚拟化用于资源管理:
在虚拟化技术的发展过程中,人们逐渐发现了虚拟化的另一大用途,也就是将之应用于计算机资源的管理。
- 原理:
- 虚拟化技术抽象计算机物理资源,进而加工成虚拟的计算资源
- 所以虚拟化技术本身可以将数据做一些“手脚”来实现“管理”的目的
- 例如:物理机无论是8G、16G还是32G内存,虚拟机都告诉程序机器只有4G内存,应用程序就都会按照4G这个虚拟值来处理逻辑
- 大幅提供了计算机资源的使用率
提高计算机资源使用率,而非减少程序资源的占用率,这两者看似很相近,其实并非是同一个概念。虚拟化技术能够提高计算机资源的使用率,是指利用虚拟化,我们可以将原来程序用不到的一些资源拿出来,分享给另外一些程序,让计算机资源不被浪费。
- 示例:
- 一台运行Nginx的机器,Ngx本身对系统资源消耗不高,使系统95%以上资源处于闲置
- 通过虚拟化技术,把其他的一些程序放到机器上运行,就可以充分利用闲置资源
- 好处是不需要为这些程序单独部署机器,从而节约成本
- 对比在同一操作系统里安装这些程序同时运行,为什么要进行虚拟化:
- 原理:
- 大的分类:
- 硬件虚拟化
- 示例:
- 一、某平台CPU,可以将另外一个平台的指令集转换为自身指令集,并给程序完全运行在对应平台的感觉
- 二、CPU能够自身模拟裂变,让程序或操作系统以为存在多个CPU,进而能够同时运行多个程序或者操作系统
- 示例:
- 软件虚拟化
- 示例:
- 一、通过一层夹杂在应用程序和硬件平台上的虚拟化实现软件来进行指令转换(模拟其他平台CPU)
- 示例:
- 硬件虚拟化
- 更加细化的分类:
- 平台虚拟化:
- 在操作系统和硬件平台间搭建虚拟化设施,使得整个操作系统都运行在虚拟后的环境中。
- 应用程序虚拟化:
- 在操作系统和应用程序间实现虚拟化,只让应用程序运行在虚拟化环境中。
- 内存虚拟化:
- 将不相邻的内存区,甚至硬盘空间虚拟成统一连续的内存地址,即我们常说的虚拟内存。
- 桌面虚拟化:
- 让本地桌面程序利用远程计算机资源运行,达到控制远程计算机的目的。
- 其他
- 平台虚拟化:
虚拟机:
通常来说就是通过一个虚拟机监视器 ( Virtual Machine Monitor ) 的设施来隔离操作系统与硬件或者应用程序和操作系统,以此达到虚拟化的目的。这个夹在其中的虚拟机监视器,常常被称为 Hypervisor。
- 图示:
- 示例:
- VMware Workstation
- Xen
- Java虚拟机JVM
- PHP虚拟机HHVM
- 扩展:
- 所有的指令都必须经过虚拟机监视器的处理。这也就意味着,虚拟机的性能是低下的。
- 例如运行在 ZendVM 或者 HHVM 中的 PHP 程序,所有代码虽然编译成了 Opcode 码,但其依然是通过虚拟机才最终转换为机器所能识别的机器码去执行。
- 真实的虚拟机程序常常不完全遵循Hypervisor设计结构,引入一些其他技术来解决效率问题
容器技术:
容器技术,指的是操作系统自身支持一些接口,能够让应用程序间可以互不干扰的独立运行,并且能够对其在运行中所使用的资源进行干预。
- 全新意义上的虚拟化技术
- 按分类和实现方式来说,应该属于操作系统虚拟化的范畴——由操作系统提供虚拟化的支持
- 名字由来:
- 由于应用程序的运行被隔离在了一个独立的运行环境之中,这个独立的运行环境就好似一个容器,包裹住了应用程序,这就是容器技术名字的由来。
- 运行在容器虚拟化中的应用程序,在运行效率上与真实运行在物理平台上的应用程序不相上下
- 指令转换?:
- 剖析图:
- 结论:
- 由于没有了虚拟操作系统和虚拟机监视器这两个层次,大幅减少了应用程序运行带来的额外消耗。
- 所有在容器中的应用程序其实完全运行在了宿主操作系统中,与其他真实运行在其中的应用程序在指令运行层面是完全没有任何区别的。
- 对比:
特性 容器 虚拟机 启动 秒级 分钟级 硬盘使用 一般为MB 一般为GB 性能 接近原生 弱于 系统支持量 单机支持上千个容器 一般几十个 补充:
- 容器层之下没有了统一的hypervisor,Dockfile指定的软件,在移植时还需要指定操作系统才能运行
- 本文作者: xiaoxiaozi
- 本文链接: http://www.xiaoxiaozi.com/2022/08/04/juejin_docker_1/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!