虚拟化+docker概念基本介绍
虚拟化+docker概念基本介绍
- 前言
- 一、虚拟化
- (1)虚拟化概述
- (2)cpu的时间分片(cpu虚拟化)
- (3)cpu虚拟化性能瓶颈
- (4)虚拟化工作原理
- ①虚拟化类型
- ②虚拟化功能
- 二、Docker容器概述
- (1)Docker是什么
- (2)使用Docker的意义
- (3)Docker的使用场景
- (4)Docker引擎(Docker Engine)
- (5)Docker三要素(核心组件)
- (6)六大名称空间
- (7)资源控制——cgroups
- (8)容器特性
- (9)容器小的架构体系
- 三、Docker和虚拟化的区别
- 总结
- (1)什么是docker?docker原理?
- (2)简述Docker主要使用的技术?
- (3)简述Docker体系架构
- (4)Docker有哪些优势?和虚拟化比有什么优势?
- (5)如何把多个目录挂载到同一个目录下?
前言
- 以Linux而言,Linux操作系统会有一个主进程pid=1派生出其他进程老控制不同服务,例如: pid=2 ——> python pid=3——>java pid4——>php,三个服务可能会相互影响。
- 而使用者期望将这三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本
——> 延伸出——>能否将这三种服务分别封装起来——>KVM虚拟化技术,实现了一个操作系统模拟多个操作系统/不同的运行时环境 - 随着技术发展——>虚拟化技术开销较大(例如:只 要运行一个py脚本,想要使用虚拟化方式实现,还需要安装一个操作系统,并不方便/合理)
——>延伸出容器技术
虚拟化层的抽象层(用户层)剥离,使用docker engine来替代(来宾操作系统去除),只要通过引擎就可以直接连接到宿主机操作系统中,极大减小了开销
一、虚拟化
(1)虚拟化概述
虚拟化:将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率
(2)cpu的时间分片(cpu虚拟化)
- 正常每个任务以轮询的方式去处理,这个时候一个CPU一个整体。
- 以下是针对的CPU单位时间内的一个资源。按时间划分,1秒划分成10个0.1秒,每个0.1秒可以全力处理10单位的任务。在1秒内,都在全力工作。
- cpu 1s全力运转的性能——》逻辑分割成分成了10份,可以理解为在单位时间内可以处理10个任务,每一个0.1s cpu是满的。原先分片前100M以下的任务一次只可以处理1个,现在100M的任务一次可以处理10个。这就是时间分片的一个概念。
- 虚拟化作用——》缓解/解决了资源利用率的问题
(3)cpu虚拟化性能瓶颈
cpu分片后每个任务处理性能会打对折。
- 如果是50m及50m以下的任务的话,虚拟化后的,1s模拟10个cpu,可以处理10个。虚拟化后的性能更高。
- 如果是50+m的任务的话,物理硬件的性能就会比虚拟化的性能高了。虚拟化的cpu会卡顿。所以在极度吃资源的情况下,例如mysql高并发这种,就不适合用虚拟化。
(4)虚拟化工作原理
虚拟机管理器功能:调用资源
两大核心组件:QEMU、KVM
- QEMU:
①可以理解为队列,核心目的是调用资源内核中的资源,需要把KVM逻辑分割出来的资源运输给QEMU,再给虚拟机。
②QEMU它并不是直接调用,而是用I/O方式调用,QEMU把资源调用来的过程借用ioctl,QEMU借助libvirt这个工具调用ioctl,再通过接口,给虚拟机应用程序。
- KVM:
①用来逻辑分割物理资源,抽象化为虚拟化资源,根据VMM里的配置,会逻辑分割出多少G,给应用程序,去进行虚拟化。
②只接受来自QEMU的请求指令。对于应用程序直接过来的敏感指令会拦截,然后通过接口发给QEMU,让QEMU判断是否需要执行,可以的话,再下来,不可以的话,打回去,不执行该敏感指令。
对于workstation而言——》硬件辅助虚拟化,表现形式在处理器里面有一个虚拟化引擎,可以勾取硬件辅助虚拟化,看到虚拟接口/dev/kvm,可以加强辅助调用,在应用程序需要频繁调用的时候,需要开启。比如openstack。
①虚拟化类型
- 全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用
- 半虚拟化:需要修改操作系统
- 直通:直接使用物理硬件资源(需要支持,还不完善)
全虚拟化——》基于硬件为基础以软件的形式模拟硬件设备(在一定程度上解决了性能利用率的问题)
半虚拟化——》趋近于物理设备的性能 (在提高利用率的同时,尽可能的提高性能)
虚拟化产品
KVM ——》全虚产品—》全部都是使用软件形式定义的功能/模拟的硬件设备
EXSI———》半虚产品—》企业用的很多的虚拟化产品(wmware)
②虚拟化功能
①在一个操作系统内,模拟多个操作系统
② 以软件的方式模拟物理设备的功能
二、Docker容器概述
容器基础概念—》六大名称空间
名称空间:以不同空间划分不同资源
(1)Docker是什么
是一种轻量级的“虚拟机”,Docker是一个用于开发,交付和运行应用程序的开放平台。
在Linux容器里运行应用的开源工具——》容器引擎,让开发者可以打包大门的应用及依赖包到一个可移植的镜像中,然后发布到任何流行的linux或者window机器中。
Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。
鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。Docker的设计宗旨:Build,Ship and Run Any App,Anywhere
即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的**“一次封装,到处运行”**的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。
(2)使用Docker的意义
把容器化技术做成了标准化平台
- docker引擎统一了基础设施环境——docker环境
- docker引擎统一了程序打包(装箱)方式——docker镜像(把引擎放在镜像中,带着镜像到处跑)
- docker引擎统一了程序部署(运行)方式——docker容器(利用引擎把这个镜像再去运行为之前的相同的一模一样的容器了)
镜像——》封装的一个时刻的服务/应用状态
容器——》应用跑起来的状态(正常提供服务的状态 - 运行时
(3)Docker的使用场景
①打包应用程序部署简单
②可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦)例如:需要把服务器从腾讯云迁移到阿里云,如果采用的是 Docker 容器技术,整个迁移的过程只需要在新的服务器上启动我们需要的容器就可以了。
③适合做微服务的部署
④适合持续集成和持续交付(CI/CD):开发到测试发布
(4)Docker引擎(Docker Engine)
Docker Engine是具有以下主要组件的客户端-服务器(C/S架构)应用程序:
server端:服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。
client端:REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。
命令行界面(cLI)客户端((docker命令)。
docker run
docker start
docker rm
(5)Docker三要素(核心组件)
Docker images:镜像:统一的封装方式——》模板
Docker container:容器:统一的运行时环境 ——》基于镜像,运行状态/运行时状态
Docker registry:镜像仓库:放置镜像的仓库——》存放镜像模板
存储镜像的地方,默认在公共的 Docker Hub上查找,可以搞个人仓库。
仓库大类:①公共仓库—》docker hub ②私有仓库registry harbor
- 客户端发起各种各样的命令,给与主机
- 主机会调用镜像,如果有镜像直接用,运行为容器
- 如果镜像里没有会到registry公共仓库去拉去镜像,拉到本地后再运行为容器
(6)六大名称空间
namespace资源隔离——用容器技术封装
mount | 文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录 |
---|---|
user | 操作进程的用户和用户组 |
pid | 进程编号 |
uts | 主机名和主机域 (同一个环境里不能又叫node1又叫node2) |
ipc | 信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间) |
net | (网络资源) 网络设备、网络协议栈(在同一个网络名称空间中的网络规则)、端口等 |
(7)资源控制——cgroups
- 六种名称空间是由cgroups管理的
- 最后一种centos的cgroups管理版本是3.8版本,3.6和3.5用不了
- cgroups 管理linux内核态中资源管理的模块
- cgroups 管理一些系统资源
- 不是docker原生的。
(8)容器特性
特性——》性能损耗10-20%
- 灵活:即使是最复杂的应用也可以集装箱化。
- 轻量级:容器利用并共享主机内核。
- 可互换:可以即时部署更新和升级。
- 便携式:可以在本地构建,部署到云,并在任何地方运行。
- 可扩展:可以增加并自动分发容器副本。
- 可堆叠:可以垂直和即时堆叠服务
(9)容器小的架构体系
三、Docker和虚拟化的区别
特性 | Docker容器(一个进程控制) | 虚拟机虚拟化(完整的操作系统) |
---|---|---|
启动速度 | 秒级 | 分钟级 |
运行性能 | 接近原生(直接在内核中运行)10%-20%左右的损失 | 50%左右损失(全虚拟化类型) |
磁盘占用 | 50-100MB | 3-5G |
数量 | 成百上千,每个进程可控制一个容器 | 几十个 |
隔离性 | 进程级别 | 操作系统(更彻底,安全级别高) |
操作系统 | 主要支持Linux | 几乎所有 |
封装程度 | 只封装目标代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |
- 容器是依赖于内核来隔离,彼此的关系像共享一样,所以安全性较之虚拟机差一些,毕竟不是完全隔离。所以若一个容器被黑客攻破,宿主机基本也就没了。
- 这里也不是完全没有办法,那就是 cgroup 资源分配,其能提供一定的安全机制
总结
(1)什么是docker?docker原理?
- docker是一种封装和运行的开源平台,他统一了封装方式,统一了运行方式,开源平台指的是docker引擎,统一的封装方式指的是镜像,统一的运行方式指的是容器。
- cgroup资源控制与namespaces两者构成了docker底层原理
- docker是一种容器技术,把linux中的cgroups(资源管理)和namespace(名称空间)等容器底层技术进行完美封装,并抽象为用户创建和管理容器的便捷界面(命令行cli、api等),这种C/S架构
(2)简述Docker主要使用的技术?
- Cgroups:资源控制,管理一些系统资源
- Namespace:资源隔离(名称空间)
- rootfs:文件系统隔离(使用内核提供的rootfs)
- 容器引擎(用户态工具) :生命周期控制
docker本质就是宿主机的一个进程, docker是通过namespace(命名空间)实现资源隔离,通过cgroup,实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘50og)
Namespace:资源隔离(名称空间)
mount | 文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录 |
---|---|
user | 操作进程的用户和用户组 |
pid | 进程编号 |
uts | 主机名和主机域 (同一个环境里不能又叫node1又叫node2) |
ipc | 信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间) |
net | (网络资源) 网络设备、网络协议栈(在同一个网络名称空间中的网络规则)、端口等 |
(3)简述Docker体系架构
Docker客户端 - Docker
docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。
Docker服务端-Docker Daemon资源限制
docker服务端是一个服务进程,管理着所有的容器。Docker镜像一Imagefont>
Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向Docker容器引擎的只读模板。通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码。运行时间,库,环境变量,和配置文件
Docker容器-Docker Container
Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
Docker镜像仓库-- Registryfont>
Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private、常用)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
Docker的镜像、容器、日志等内容全部都默认存储在**/var/lib/docker**目录下。
(4)Docker有哪些优势?和虚拟化比有什么优势?
docker把容器化技术做成了标准化平台,只要安装了docker引擎,就能使用docker。
使用docker有什么意义(实现了3个统一)
docker引擎统一了基础设施环境-docker环境——>image——>封装一一个简易的操作系统(3.0+G)
docker引擎统一了 程序打包(装箱/封装-类比于集装箱)方式-docker镜像——>images
docker引擎统—了程序部署(运行)方式-docker容器——>基于镜像——>运行为容器(可运行的环境)实现了一次构建,多次、多处使用。
(5)如何把多个目录挂载到同一个目录下?
(存储引擎)overlay2(现在使用) 和 (存储引擎) aufs(早期使用)叠加式文件系统
docker引擎统—了程序部署(运行)方式-docker容器——>基于镜像——>运行为容器(可运行的环境)
- 实现了一次构建,多次、多处使用。
虚拟化+docker概念基本介绍相关推荐
- Android多开和虚拟化--Docker概念的详细介绍
本文只是对Docker的概念做了较为详细的介绍,并不涉及一些像Docker环境的安装以及Docker的一些常见操作和命令. 通过阅读本文你将知道以下概念: 容器 什么是Docker? Docker思想 ...
- 一、Docker 概念、生态、相关版本
一.容器 及Docker 概念 1.什么是容器? 先从认识容器开始 先来看看容器较为官方的解释: 一句话概括容器:容器就是将软件打包成标准化单元,以用于开发.交付和部署. 容器镜像是轻量的.可执行的独 ...
- OPNFV董事邓辉:网络功能虚拟化开源平台OPNFV介绍
2016年6月1-2日,"2016全球SDNFV技术大会"在北京盛大召开.作为连续举办三届的SDN/NFV技术与产业盛会,本届大会着眼于SDN/NFV的实践应用与部署,从SDN/N ...
- Docker Review - Docker 概念 入门篇
文章目录 Pre What's Docker ? Why Docker ? Docker vs VM 常用概念 安装Docker 1. 查看服务器信息 2. 卸载旧的版本 3. 依赖的安装包 4. 设 ...
- 什么是容器、什么是docker、docker与虚拟机的对比、docker做什么、运行场景,Docker功能和组件,Docker的C/S模式的运行,Docker概念,相关概念
1.什么是容器 简单来说容器是一种内核技术的虚拟化体现(Cgroup和Namespace),容器可以在核心CPU上运行本地指令,有效的将单个操作系统进行分组管理和隔离. 2.什么是Docker 一种容 ...
- 【docker概念和实践 1】 基本概念和组成原理
一.说明 初学Docker就一个字:乱!这是因为Docker是一个庞大体系,初学时不了解全貌,处于"盲人摸象"状态,因不能通晓要领,学了一点,过后就忘了.而了解Docker全貌并非 ...
- 虚拟化的主流技术介绍
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机上可以运行不同的操作系统,并且应用程序都可以相互独立的空间内运行而互不影响,显著提高计算 ...
- 【云计算】Pod概念及介绍
CSDN话题挑战赛第2期 参赛话题:万家争鸣的云计算修罗场 我想分享的云计算技能/知识点 Pod概念及介绍 该技能/知识点的背景介绍 在docker中,最小的调度单位是Container(容器),容器 ...
- 【云原生】第四篇--Docker容器镜像介绍及应用
Docker容器镜像介绍及应用 一.Docker容器镜像操作 1.1 查看本地容器镜像 1.1.1 使用docker images命令查看 1.1.2 使用docker image命令查看 1.1.3 ...
最新文章
- php把excel变成数组,PHP excel读取excel文件转换为数组
- linux 内核定时器 3.11 版本,Linux内核定时器简单使用
- 安卓手机兼容_重磅:鸿蒙OS2.0手机开发者Beta版发布,能兼容安卓
- 推荐系统的应用案例剖析
- c++的虚拟继承 的一些思考吧
- 微型计算机上的南桥芯片功能,微型计算机及接口技术2012年1月真题试题(04732)...
- 华为智慧屏华为正式发布鸿蒙,舒适大屏体验,华为智慧屏SE让智慧生活一步到位...
- CRM【第三篇】: crm业务
- Neo4j_02了解图数据库
- c++ string split_闲话Python之砍瓜切菜split()
- 单溶水箱串级控制计算机控制,单容水箱液位控制系统
- PayPal支付流程
- 《HTML CSS JavaScript 网页制作》第六章-创建框架结构网页
- Mysql创建用户并赋予权限
- 计算机老师为什么不用伽卡他卡做文件服务器?
- 用SDK包开发K66FX18学习笔记(4)
- SaaSpace:9种最好的免费幻灯片制作工具
- PPC气箱脉冲除尘器
- systemUI之statusBar
- 斜渐近线b为0为什么不存在_向量的奇技淫巧——斜坐标系
热门文章
- Linux使用C语言实现ls命令
- 如何做好网络推广?软文文案在做网络推广上的策略分享
- 通过LiveNVS(免费使用)集中化管理多个LiveNVR-数据透传摆脱局域网的公网IP限制
- 计算机页面里的坚果云删不了怎么回事,我的坚果云文件夹为什么无法删除
- ​保时捷拟IPO:估值或超800亿美元 与大众有多年恩怨情仇
- 摄影测量外方位元素代码
- Nature证实:学术界刮起离职潮!大批学者涌向工业界,互助文档日均20个学者离职...
- 如何批量在excel中将中文转换为汉语拼音(Excel文字转拼音两种方法)
- Python学习八:pip 最常用命令、pip升级、pip 清华大学开源软件镜像站、Python日期和时间(Time模块、日历(Calendar)模块)
- 熬夜慢性自杀全过程曝光 | 程序员入坑必读