虚拟化技术可以通俗的理解成“把一台电脑虚拟成N台电脑”。
***个流派叫做“硬件虚拟化”
硬件虚拟化的机制超级复杂,我认怂。。。
这里贴上这篇科普文章,感兴趣的小伙伴请猛戳这里
科普:什么是硬件虚拟化技术
https://baijiahao.baidu.com/s?id=1573894724153924&wfr=spider&for=pc
第二个流派叫做“软件虚拟化”
其实软件虚拟化,各位小伙伴都玩过,以前为了玩某些特殊的日本游戏,我们通常会在自己的电脑上安装一个虚拟机,画了张图进行说明:
首先,我们自己的电脑,即图中***层的“硬件”;
然后,在这台电脑上安装操作系统,即图中“物理机操作系统”;
再然后,我们在这个操作系统上安装VMWare之类的虚拟机管理软件,即图中“Hypervisor”;
再然后,在虚拟机管理软件上安装一个虚拟机,即图中“虚拟操作系统”;
***,在虚拟操作系统上,安装那些特殊的日本游戏,即同种“应用软件”;
图中红框,就是软件虚拟化技术,从而实现了把一台真实的物理机器,切分成了N台虚拟的机器。
另外,Java虚拟机、.Net框架也是一种软件虚拟化技术。
第三个流派叫做“容器化”
容器化流派就是利用了Linux的LXC、CGroup等技术。
LXC的本质就是“进程隔离、资源隔离”——1台物理机切分成N台虚拟机成为了可能;
CGroup的本质就是LXC的资源管理机制——N台虚拟机谁占用物理机多少CPU?内存?
具体的技术讲解,贴上百度百科,有兴趣的同学请自行脑补
LXC介绍
https://baike.baidu.com/item/lxc/6014808?fr=aladdin
CGroup介绍
https://baike.baidu.com/item/Cgroup
Docker容器化的架构(如下图)
- 关键点1:物理操作系统上安装上Docker的守护进程;
- 关键点2:Docker上运行着N个容器;
- 关键点3:Docker为每个容器分配指定的硬件资源(CGroup);
- 关键点4:每个容器彼此隔离,你不知我,我不知你(LXC之Namespace);
- 关键点5:每个容器非常小、非常小、非常小
***,展开一下在Docker的官网上、各类书籍中常见的这张Docker架构图
这张图画的很深刻,很形象、简洁的表达了Docker的技术脉络
- Docker daemon:docker的守护进程,一切神秘的机制都包含在此;
- REST API:docker守护进程提供http接口,可以通过http方式操作;
- docker CLI:docker守护进程提供的命令行接口,可以通过命令行方式操作;
- API的分类:无论rest,还是cli,分为4类——镜像管理、容器管理、数据卷管理、网络管理
- 镜像:打个通俗的比方,我们在物理机上安装一个windows,然后用Ghost做一个备份,如果电脑被黑了,马上把备份拿出来还原,这个“备份”在Docker的世界里叫做“镜像”。
- 容器:上面所说的备份,你拿到***台物理机上还原出来,那么这个还原出来的windows系统就是一个“容器”——一个镜像可以生成出N个容器
- 数据卷:每个容器如果要把数据穿透Docker,直达物理机的硬盘,这就要用到数据卷。
- 网络:前文说过,容器和容器,你不知我,我不知你,彼此隔离,即使在同一个物理机上的两个容器好像网络上两个孤岛,彼此不能通信,打通他们,就要用到网络