文章目录

  • 一、为什么要虚拟化
  • 二、什么是虚拟化
  • 三、虚拟化技术分类
  • (1)全虚拟化技术
  • (2)半虚拟化技术
  • (3)寄居架构
  • (4)裸金属架构
  • 四、Docker与传统技术对比
  • 五、Docker技术
  • 六、Docker重要概念


一、为什么要虚拟化

虚拟化前:
1、系统资源利用率低。经调查,服务器只有5%的资源得到利用。
2、每台主机一个操作系统,且在一个电脑上运行多个进程会遭遇冲突。
3、硬件成本高昂且不够灵活。
虚拟化后:
1、打破系统和硬件的相互依赖。
2、强大安全和故障的隔离。
3、通过封装到虚拟机,管理程序和应用程序为单一个体。
4、虚拟机可以在任何硬件上运行。

二、什么是虚拟化

把一个计算机虚拟为多个逻辑计算机,可以在一台计算机上同时运行多个逻辑计算机。每个逻辑计算机可以有不同的操作系统,且运行互不影响,显著提升效率。
从linux进程视角看,进程运行时,周边资源有:
1、linux内核
2、文件系统
3、网络系统
4、PID(进程id)、UID(用户id)、IPC(进程间通讯)
5、CPU、内存、磁盘
所有进程共享以上资源,看到周边环境相同。但技术发展产生了如下需求:
1、安全隔离:不同进程,独立环境
2、资源限制:限制某些进程使用资源
3、对一组以上进程进行上述隔离
Docker满足这些限制条件的进程组,就叫容器。容器是Google2006提出的,2010Docloud给出完整解决方案Docker,京东阿里有在开发类似技术。

三、虚拟化技术分类

技术角度:全虚拟化技术、半/准虚拟化技术
架构层次:寄居架构、裸金属架构

(1)全虚拟化技术

又叫硬件辅助虚拟化技术,在虚拟机(VM)和硬件层间加了个软件层Hypervisor,即虚拟器监控容器(VMM)。此监控器直接运行在物理硬件上,即KVM技术;运行在另一个操作系统里,即QEMU和WINE技术。

其实这个层就是虚拟机和硬件层的翻译官。以下是KVM的图。

android 虚拟化 轻量 轻量级虚拟化技术_android 虚拟化 轻量

(2)半虚拟化技术

也叫准虚拟化技术,在全虚拟基础上对客户操作系统做了修改,增加了专门的API对客户操作系统指令最优化。即不需要Hypervision耗费资源进行翻译,因此Hypervision的工作负担变小,整体性能有很大提高。但是这需要去修改OS系统,一般只有大厂才能提供这种技术支持,且性能比全虚拟化提高不是非常显著,所以得不偿失。

android 虚拟化 轻量 轻量级虚拟化技术_虚拟化_02

(3)寄居架构

在操作系统上安装运行虚拟化程序,依赖对主机操作系统对设备的支持和物理资源的管理。

优点:便于实现。

缺点:安装运行依赖主机操作系统对设备的支持(主机万一挂了,黑嘿!)。消耗资源大。

举例:GSX Server、VMware、Workstation

android 虚拟化 轻量 轻量级虚拟化技术_Docker_03

(4)裸金属架构

直接在硬件上安装虚拟化软件,再在上面安装操作系统和应用,依赖虚拟层内核和服务器控制台进行管理。

优点:灵活。

缺点:虚拟层内核开发难度大。

举例:VMware ESXI Server

android 虚拟化 轻量 轻量级虚拟化技术_虚拟化_04

四、Docker与传统技术对比

如下图,主要是无Guest OS层:

android 虚拟化 轻量 轻量级虚拟化技术_虚拟化_05


优点:

1、占用磁盘小,原来动不动上GB,现在镜像层甚至只有几十kb

2、启动速度快,原来需要几分钟,现在只需要几秒

3、运行状态更灵活

4、并发性高,原来最多几十台虚拟机,现在可以启动成百上千个容器

5、性能高,原来是逊于宿主机,现在等同于宿主机

6、资源利用率高

7、开发、部署、测试、管理效率都大大提高

五、Docker技术

Docker设想运行环境像海运一样,OS如同货轮,每个OS上的软件如同集装箱,用户可以通过标准化手段自由组装运行环境,集装箱内容也可由用户自定义或者由专业人员制造。

android 虚拟化 轻量 轻量级虚拟化技术_虚拟化_06


Docker的所需文件系统结构和内容在一个只读镜像模板里,组成一个静态文件系统,也就是rootfs。linux启动会先挂载一个rootfs,验证系统完整性后切换为读写模式;而Docker也差不多是这样,先启动挂载rootfs,然后利用联合挂载技术,在只读层rootfs上挂载一个读写层,下面联合挂载一到多个只读层。

主要实现技术有LXC容器技术、AUFS文件分层技术、cggroups资源限制技术,至于具体的太过底层就不讲解了,我也忘光了。

大家可以瞅瞅Docker容器构成:

android 虚拟化 轻量 轻量级虚拟化技术_虚拟化技术_07

六、Docker重要概念

1、镜像(image)
类似虚拟机快照,但更轻量。包含完整的系统环境,可以用来创建容器。镜像可以直接从仓库拉取pull,也可以把我们的镜像传到仓库push。
docker images可以查看当前仓库有哪些镜像。
2、容器(container)
其实就是image的实例,共享内核。学过编程的话很容易理解这一点。
3、Docker Daemon
创建运行Docker的linux守护进程。可以理解为Container的Container。
4、数据卷(volumes)
提供一个或多个容器使用的特殊目录。
5、链接(links)
除了端口映射外的另一种和容器里应用交互的方式,相当于一个源容器和目标容器的安全隧道。避免暴露端口到外部网络。
6、仓库(Repository)
集中存放镜像的场所。