虚拟化的常用技术实现形式(为了实现资源隔离),我来为大家科普一下关于每天5分钟玩转docker容器平台:Day1:Docker容器技术入门?以下内容希望对你有帮助!

每天5分钟玩转docker容器平台:Day1:Docker容器技术入门

每天5分钟玩转docker容器平台:Day1:Docker容器技术入门

一、虚拟化

虚拟化的常用技术实现形式(为了实现资源隔离)

- 主机级虚拟化

- Type-I虚拟化:直接在硬件平台安装一个vmm,不过资源开销过高;

- Type-II虚拟化:Vmware、KVM...在宿主机上面安装主机操作系统(host os),随后在宿主机上安装vmm(虚拟机管理器)在vmm上创建和使用虚拟机;

- 容器级虚拟化

二、容器技术
  1. 自下而上摞起来的机器架构

2. 内核的核心作用在于资源分配和管理

在用户空间跑的应用进程才能产生生产力而不是操作系统内核,所以节省效率想把内核去掉;但又必须要有内核空间,软件是针对内核的系统调用和库调用,没有内核则无法运行程序;而且进程间协调也是需要内核的;但如果创建一个虚拟机的目的就是为了跑一个web服务器这样的话就要安装内核、安装用户空间、这样资源开销就会过高.

3. 针对二级虚拟化来说:

进程如果要运行需要实现两级调度和资源分派

1. 自己虚拟机的内核 --> 内存虚拟化、CPU调度、IO的调度等等

2. 真正的虚拟机本身也是被宿主机内核管理的抽象层,所以还要调度一次 就会产生额外开销所以传统的主机虚拟化技术确实会让我们在一组硬件平台之上实现跨系统环境、隔离、实验、调试等各种需求,但是带给我们的资源开销还是很大的,很多时候我们只是想创建有限的一个或几个富有生产责任的进程而已,而为此付出的代价就比较大了;

三、自下而上摞起来的Docker架构隔离环境

隔离环境(也就是隔离的用户空间)可以共享底层同一个内核空间,但运行的进程在运行过程中能看到的边界仅是自己所属的用户空间的边界,隔离后的用户空间给进程提供运行环境并能保护进程不受其他进程的干扰(防止其他进程被远程劫持进行破坏,即使被劫持也只能看到自己所属的用户空间边界)这就叫做容器;

最早上述容器的概念出现在jail,随后复刻到Linux上的vserver上,vserver当时能实现的功能就是chroot(切根)真正的根应该是文件系统的根,实现切根以后,假如在一个子目录下也创建一个fhs定义的发行版应该具有的根下的子目录结构后,使用chroot就能够将子目录当根一样使用,随后在里面运行的进程就会认为这就是根目录;

真正要实现用户空间隔离:在一个单独的用户空间中,一个所谓的用户空间主要目标为了实现隔离环境,进程运行在用户空间中就以为自己是唯一运行在当前内核之上用户空间的进程,而自己能看到的其他进程也会理解为系统上所有进程了;

用户空间中进程看到的组件:

上述这些每一种资源在内核中都被隔离的话被称作名称空间。

名称空间

上述六中已经在名称空间中被支持。要想使用容器,得靠Linux内核级的内核资源用于支撑用户空间的内核级的内核资源的名称空间隔离机制来实现。

现在所谓的容器化技术就是靠namespaces内核级的六个namespaces加上chroot来实现的;

Control Groups(Cgroups): 将系统级的资源分为多个组;

将每个组中资源量进行指派或分配到特定的用户空间的进程上来实现;

- blkio: 块儿设备

- cpu: CPU

- cpuacct: CPU资源使用报告

- cpuset: 多处理器平台上的CPU集合

- devices: 设备访问

- freezer: 挂起或恢复任务

- memory: 内存用量及报告

- perf_event: 对cgroup中的任务进行统一性能测试

- net_cls: cgroup中的任务创建的数据报文的类别标识符

四、Linux Container(LXC):

- lxc-create: 可以快速创建一个容器(一个名称空间),创建完成后执行一个脚本(template)用于自动实现安装过程-->创建的名称空间的系统发行版所属的仓库,从仓库中将对应程序包下载下来安装生成新的名称空间;

Docker是LXC的增强版

五、Docker是什么

Docker早期是LXC的二次发行版,Docker具有镜像这么一说,部分镜像存储在镜像仓库,当我们使用Docker创建容器的时候它会自动链接至镜像仓库下载创建容器需要的镜像拖到本地,并基于镜像创建容器,极大的简化了容器的使用难度。

,