目录
前言
Docker 是在 Linux 容器里运行应用的一种开源工具,是一种轻量级的虚拟机
(1)以linux而言,linux操作系统会有一个主进程pid=1派生出其他进程来控制不同服务
(2)例如: pid=2 ——> python pid=3——>java pid4——>php,三个服务可能会相互影响
(3)使用者期望将这三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本——> 延伸出——>能否将这三种服务分别封装起来——>KVM虚拟化技术,实现了一个操作系统模拟多个操作系统/不同的运行时环境
(4)随着技术发展——>虚拟化技术开销较大(例如:只 要运行一个py脚本,想要使用虚拟化方式实现,还需要安装一个操作系统,并不方便/合理)——>延伸出容器技术
(5)虚拟化层的抽象层(用户层)剥离,使用docker engine来替代(来宾操作系统去除),只要通过引擎就可以直接连接到宿主机操作系统中,极大减小了开销
一、虚拟化概述
虚拟化:将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率
1.虚拟化三种模式
全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用
- 使用的方法:使用hypervisor(VMM)软件,其原理是在底层硬件和服务器之间建立一个抽象层,而基于核心的虚拟机是面向Linux系统的开源产品hypervisor(VMM)可以捕捉CPU的指令
半虚拟化(软、硬件结合的方式):需要修改操作系统
直通(以全硬件的方式实现虚拟化的功能):直接使用物理硬件资源(需要设备支持,还不完善)
2.虚拟化功能
- 在一个操作系统内,模拟多个操作系统
- 以软件的方式模拟物理设备的功能
3.三个层面
- 操作系统层
- 抽象层
- 内核层
二、KVM简介
1、广义KVM
- KVM (Kernel-based vritual Machine)——基于内核的虚拟机
- KVM是基于虚拟化扩展的X86硬件的开源Linux原生的全虚拟化方案(要求cpu支持Intel-vT-x或AMD-V)
- KVM内嵌于内核模块中,模拟处理器和内存以支持虚拟机运行
- 虚拟机被实现为常规的Linux进程,由标准Linux调度程序进行调度;虚拟机的每个虚拟CPU被实现为一个常规的Linux进程。这使得KMV能够使用Linux内核的已有功能但KVM本身不执行任何模拟。
- 需要客户空间程序(虚拟机)通过/dev/kvm (此虚拟设备需要开起硬件辅助虚拟化才能看到)接口设置一个客户机虚拟服务器的地址空间,并且由Qemu模拟I/O (ioctl)进行调度资源和维护管理
- Libvirt:KVM的管理工具,除了可以管理KM这类VMM,还可以管理xen,VirtualBox,甚至Openstack底层
- Libvirt包含3个组件:后台daemon程序libvirtd、 API库、命令行工具virsh
2、KVM架构及原理
2.1 KVM虚拟化架构/三种模式
客户机在操作系统中运行的模式,客户机分为内核模式和用户模式,作用如下:
(1)客户模式:
为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O,Qemu_ 工作在此模式下(Qemu的主要功能)
(2)linux内核模式:
模拟CPU、内存,实现客户模式切换,处理从客户模式的推出,KVM即运行在此模式下