目录
一、引言
二、虚拟化介绍
1、虚拟化概念
2、耦合和解耦合概念
2.1、耦合性
2.2、耦合
2.3、解耦合
3、虚拟化作用
4、虚拟化工作原理
5、两大核心组件
5.1、QEMU
5.2、KVM
6、虚拟化类型
三、Docker概述
1、docker是什么?
2、为什么从传统服务器迭代到虚拟化
3、Docker特点
4、Docker容器 VS KVM
4.1、KVM:
4.2、Docker容器:
4.3、区别
5、Docker的三大组成要素
6、Docker容器的运行逻辑
7、Docker 名称空间
8、控制组—cgroups(Control groups)
Linux操作系统会有一个主进程,派生出其他进程来控制不同的服务。
虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。虚拟化在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
目前主流的虚拟化技术包括开源的XEN、KVM,VMware的ESXi以及微软的Hyper-V。
将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率
耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块 之间联系越紧密,其耦合性就越强,模块之间越独立则越差,模块间耦合的高低取决于模块 间接口的复杂性,调用的方式以及传递的信息。
在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使类和构件之间的耦合最小。
解耦合,字面意思就是解除耦合关系。
在软件工程中,降低耦合度即可以理解为解耦,模块间有依赖关系必然存在耦合,理论上的绝对零耦合是做不到的,但可以通过一些现有的方法将耦合度降至最低。
缓解及解决资源利用率的问题。实际的实例的性能相对而言比虚拟化的要稳定,功能要强大的多。
一种叫做 Hypervisor (虚拟机监控程序)的软件可有效分隔物理资源,并将这些资源分配给不同虚拟环境(也就是需要这些资源的任务)使用。虚拟机监控程序可能位于操作系统的顶层(例如在便携式计算机上),或者直接安装在硬件上(例如服务器),这是大多数企业使用虚拟化的方式。虚拟机监控程序接管物理资源,并对它们进行划分,以便虚拟环境能够对其进行使用。
来自物理环境的资源根据需要进行了分区,分配给了很多虚拟环境使用。用户在虚拟环境(通常称为客户机或虚拟机)内部,能够与计算任务交互,并运行计算。虚拟机作为单个数据文件运行。与任何数字文件相同,虚拟机可从一台计算机迁移至另一台计算机,在任何一台计算机上打开,工作方式都是相同的。
当虚拟环境正在运行时,如果用户或程序发出一条指令,请求来自物理环境的更多资源, 虚拟机监控程序就会将请求传递到物理系统并缓存更改,所有这些步骤都接近本机速度(特别是如果该请求来自基于 KVM,即基于内核的虚拟机的开源虚拟机监控程序)。
QEMU是I/O控制的模块,可以理解为队列,核心目的是调用资源内核中的资源,需要把KVM逻辑分割出来的资源运输给QEMU,再给虚拟机。
QEMU是I/O控制的模块,可以理解为队列,核心目的是调用资源内核中的资源,需要把KVM逻辑分割出来的资源运输给QEMU,再给虚拟机
用来逻辑分割物理资源,抽象化为虚拟化资源,根据VMM里的配置,进行逻辑分割,给应用程序去进行虚拟化。
只接受来自QEMU的请求指令。对于应用程序直接过来的敏感指令会拦截,然后通过接口发给QEMU,让QEMU判断是否需要执行,可以的话,再下来,不可以的话,打回去,不执行该敏感指令。
①、Docker是 dotcloud 公司开源的一款产品 dotcloud是2010年新成立的一家公司,主要基于PAAS ( Platfrom as a Service )平台为开发者提供服务
②、Linux Container是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源。
③、Docker是PAAS提供商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在Github 上,基于go语言并遵从 Apache2.0协议开源
①、是一种轻量级的“虚拟机”
②、在Linux容器里运行应用的开源工具
优势:
①、对于传统服务器,可以提高利用率
②、为微服务提供对于的运行时环境
③、隔离性较高(因为虚拟机之间是完整的操作系统的隔离)
④、安全性较高,不会轻易出现雪崩的情况
⑤、管理较为方便(争议性)
⑥、比较容易进行弹性伸缩资源
⑦、前期成本高,后期相较传统,会更"便宜"点
劣势:
①、前期成本较高
②、维护难度高
③、主机安全性要求高
④、不适合运行对资源要求极高的应用(简称极度吃资源的应用)
⑤、运行代价有的时候,较高
使用Hypervisor提供虚拟机的运行平台,管理每个VM中操作系统的运行。每个VM都要有自己的操作系统、应用程序和必要的依赖文件等。
使用Docker引擎进行调度和隔离,提高了资源利用率,在相同硬件能力下可以运行更多的容器实例;每个容器拥有自己的隔离化用户空间
不同点 | Docker容器 | VM |
启动速度 | 秒级 | 分钟级 |
运行性能 | 接近原生(直接在内核中运行) | 约50%左右损失 |
磁盘占用 | MB | GB |
数量 | 成百上千 | 一般几十台 |
隔离性 | 进程进别 | 系统级别(更彻底) |
操作系统 | 只要支持linux | 几乎所有 |
分装程度 | 只打包项目代码和依赖关系,共享宿主机内核 | 完成的操作系统,与宿主机隔离 |
1、镜像:Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数。镜像不包含任何动态数据,其内容在构建之后也不会被改变。Docker镜像运行之后就变成容器(docker run)
2、容器:镜像创建的运行实例,Docker利用容器来运行应用。每个容器都是相互隔离的、保证安全的平台。我们可以把容器看做是一个轻量级的Linux运行环境。
3、镜像仓库:集中存放镜像文件的地方。用户创建完镜像后,可以将其上传到公共仓库或者私有仓库,需要在另一台主机上使用该镜像时,只需要从仓库上下载即可。
Docker使用客户端/服务器 (C/S) 架构模式,Docker守护进程(Docker daemon)作为Server端接收Docker客户端的请求,并负责创建、运行和分发Docker容器。Docker守护进程一般在Docker主机后台运行,用户使用Docker客户端直接跟Docker守护进程进行信息交互。
①、橙色流程所示,执行Docker构建指令会根据Docker文件构建一个镜像存放于本地Docker主机。
②、蓝色流程所示,本地没有需求的镜像,Docker拉取指令会从云端镜像仓库拉取镜像至本地Docker主机。
③、黑色流程所示,执行Docker启动指令会将本地已有的镜像安装至容器并启动容器。
各自的职能
Docker客户端:用于和Docker守护进程(Docker Daemon)建立通信的客户端
Docker主机:一个物理或者虚拟的机器用于执行 Docker守护进程和容器
Docker守护进程:接收并处理Docker客户端发送的请求,监测Docker API的请求和管理Docker对象,比如镜像、容器、网络和数据卷
各人总结大白话:
mount(mnt) | (挂载点)文件系统 |
user | 操作进程的用户和用户组 |
pid | 进程编号 |
uts | 主机名和域名 |
ipc | 信号量、消息队列,共享内存 |
net | 网络设备、网络协议栈、端口等 |
六种名称空间是由cgroups管理的,最后一种centos的cgroups管理版本是3.8版本,3.6和3.5用不了
Docker通过cgroup限制容器对宿主机资源的使用
cgroup四大功能 :
①、资源限制:cgroup可以对进程组使用的资源总额进行限制
②、优先级分配:通过分配的cpu时间片数量以及硬盘IO带宽大小, 实际上相当于控制了进程运行的优先级别
③、资源统计:cgroup可以统计系统资源使用量,比如cpu使用时 间,内存使用量等,用于按量计费。同时,还支持挂起动能,也就是说通过cgroup把所有资源限制起来,对资源都不能使用, 注意着并不是说我们的程序不能使用了,只是不能使用资源,处于等待状态
④、进程控制:可以对进程组执行挂起、恢复等操作
cgroup和名称空间