ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

kvm虚拟化和docker介绍

2021-11-27 18:02:01  阅读:152  来源: 互联网

标签:容器 虚拟化 kvm 镜像 docker 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、架构

在这里插入图片描述

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

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

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

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

组件:

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

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

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

5、container和VM区别

不同点containerVM
启动速度秒级分钟级
运行性能接近原生(直接在内核中运行)50%左右损失
磁盘占用MBGB
数量成百上千一般几十台
隔离性进程级别系统圾别(更停底)
操作系统主要支持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/
阿里云官网--->右上角控制台---->搜索框输入容器镜像服务---->左侧栏镜像中心内的加速器--->选择文件系统
每个账号的加速器地址都不同

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

6、镜像操作docker run hello-world

总结

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"命令工具所在的终端

 

标签:容器,虚拟化,kvm,镜像,docker,Docker,运行,客户端
来源: https://blog.csdn.net/y1035793317/article/details/121498428

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有