kvm虚拟化和docker介绍

一、kvm虚拟化

1、介绍

虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机(对计算机物理资源的抽象,实现资源的模拟、隔离和共享)。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率

简单来说就是之前我们所用的物理机器只有一台,我们在逻辑上将他划分成多个,从而实现快速,高效的作用

2、虚拟化类型

全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用

半虚拟化:需要修改操作系统(一半软件一半硬件)

直通:直接使用物理硬件资源(需要设备支持,还不完善)

3、工作原理

Guest: 客户机系统,包括CPU (vCPU) 、内存驱动(Console、 网卡、I/O设备驱动等),被KVM置于-种受限制的CPU 模式下运行。
KVM内核模块模拟处理器和内存以支持虚拟机运行
Qemu 主要处理I/O以及为客户提供一个用户空间/dev/kvm 工具ibvirt来进行虚拟机管理
ioctl (定义) 专用于设备输入输出操作的系统调用
libvirt: KVM管理工具

4、工作流程

用户模式的Qemu利用接口libkvm通过ioctl系统调用进入内核模式
KVM驱动为虚拟机创建 虚拟CPU和虚拟内存
然后执行VMLAU.NCH指令进入客户模式,装载Guest OS并运行
Guest OS运行过程中如果发生异常,则暂停Guest OS的运行并保存当前状态同时退出到内核模式来处理这些异常
内核模式处理这些异常时如果不需要I/O则处理完成后重新进入客户模式。如果需要I/O则进入到用户模式,则由Qemu来处理I/O,处理完成后进入内核模式,再进入客户模式
 

二、docker

1、docker介绍

docker是一个开发,交付,运行的开发平台,它把应用程序和基础架构分开,从而达到能够快速交付的效果

2、使用docker的意义

docker引擎统一了基础设施环境-docker环境

docker引擎统一了程序打包(装箱)方式-docker镜像

docker引擎统一了程序部署(运行)方式-docker容器

镜像:封装的某一个时刻的服务/应用状态
容器:应用跑起来的状态(正常提供服务的状态-运行时)

3、使用场景

打包应用程序简单部署

可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦)

持续集成和持续交付(CI/CD):开发到测试发布

部署微服务

提供PAAS产品(平台即服务){OpenStack的云主机类似于阿里云的ECS,属于IAAS、Docker (K8S)属于PAAS}

4、架构

kvm虚拟化和docker介绍

Docker 使用客户端-服务器架构,包含了三个主要部分:dockerd守护进程、REST API接口层、cli接口层(管理容器、镜像、网络、存储等等)

Docker 客户端与 Docker 守护进程通信,后者负责构建、运行和分发Docker 容器等繁重的工作

Docker 客户端和守护进程可以运行在同一个系统上,或者您可以将一个 Docker 客户端连接到一个远程 Docker 守护进程

Docker 客户端和守护进程通过 UNIX 套接字或网络接口使用 REST API 进行通信

组件:

镜像:镜像是一个用来构建容器的只读模版,通常一个镜像会依赖其他的镜像,创建镜像需要创建一个 Dockerfile 文件。每个Dockerfile定义镜像文件中的一层,当定义发生变化的时候,只需要更新着一层的文件即可

镜像仓库:默认情况下,容器中的应用生成的所有文件都存放在一个可写的容器层,意味着这些数据的生命周期和容器保持一致,一旦容器重启数据就丢了。另外,这些文件与容器高度关联,想要将这些文件分享给其他的容器或者设备非常困难

容器:容器是一个运行时状态下的镜像,通过docker命令我们可以创建、启动、停止、删除容器,

5、container和VM区别

不同点 container VM
启动速度 秒级 分钟级
运行性能 接近原生(直接在内核中运行) 50%左右损失
磁盘占用 MB GB
数量 成百上千 一般几十台
隔离性 进程级别 系统圾别(更停底)
操作系统 主要支持Linunx 几千所有
封装程度 只打包项目代码和依赖关系,共享宿主机内核 完整的操作系统,与宿主机隔离

6、 名称空间

mount文件系统,挂载点,一个文件系统内,不能重复挂载一个指定目录

user操作进程的用户和用户组

pid进程编号

uts主机名和主机域

ipc信号量、消总队列,共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)

net网络设备、网络协议栈、端口等

7、docker优势

docker把容器化技术做成了标准化平台CAAS (docker 统一/指定了容器化技术的标准化平台)使用

docker引擎统一了基础设施环境-docker环境》image 》封装一个简易的操作系统(3.0+G )

docker引擎统一了程序打包(装箱/封装-类比于集装箱)方式-docker镜像》images

docker引擎统一了程序部署(运行〉方式-docker容器》基于镜像》运行为容器(可运行的环境)

实现了一次构建、多次、多处使用

8、docker引擎

Docker Engine是具有以下主要组件的c/s客户端-服务器应用程序:
server端∶服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)
CLIENT端﹔REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口

命令行界面(CLI)客户端(docker命令)
docker run、docker start、docker rm

三、实操

1、安装

安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

设置阿里云镜像源
cd letc/ yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo

环境配置
systemctl stop firewalld
setenforee 0
systemctl start docker

#交装docker
yum install docker-ce docker-ce-cli containerd.io

#启动docker
systemctl start docker
systemctl enable docker

#查看是否安装成功
docker version

2、安装加速器(框内复制进去)

阿里云官网:https://account.aliyun.com/
阿里云官网--->右上角控制台---->搜索框输入容器镜像服务---->左侧栏镜像中心内的加速器--->选择文件系统
每个账号的加速器地址都不同

kvm虚拟化和docker介绍

3、 网络优化

加快转发,docker的网卡和物理机的网卡快速对接
vim /etc/sysctl.conf
net.ipv4.ip_forward=1

sysctl -p
systemctl restart network
systemctl restart docker

4、可选项:配置文件修改(生产经验)

#registry-mirrors 以上添加
  "graph":"/data/docker",		#数据目录
  "storage-driver":"overlay2",	#存储引擎
  "insecure-registries":["registry.access.redhat.com","quary.io"],	#私有仓库
#registry-mirrors 以下添加
  "bip":"172.184.70.1/24",		#docker网络
  "exec-opts":["native.cgroupdriver-systemd"],	#启动时的额外参数
  "live-restore":true			#当docker容器引擎挂掉的时候,使用docker跑起来的容器还能继续运行

5、查看版本信息

docker version

kvm虚拟化和docker介绍

6、镜像操作docker run hello-world

kvm虚拟化和docker介绍

总结

run :
pull dockerhub仓库中项目/库/镜像、start hello-world-image
1、docker client 客户端连接到了服务端(服务端是以一个守护进程的形式跑在操作系统里面的〉restful api典型的c/s架构
2、由docker 服务端的守护进程从docker hub 上下载了镜像(PS:服务端会先检查本地系统是否有这个镜像)
3、服务端创建了一个新的容器,然后从拉去的这个镜像启动了一个容器,容器执行了脚木/可执行程序让我们可以查看/使用(client)
4、docker 服务端把这些信息流〈传递)返回到客户端并展示出来,(展示在终端上)
docker client可以是多种形式,比如"docker"命令工具所在的终端

 

上一篇:XXX packages are looking for funding run `npm fund` for details


下一篇:Stata:贝叶斯方法-bayes