目录
前言
一、虚拟化简介
1.1 虚拟化概述
1.2 cpu的时间分片(cpu虚拟化)
编辑
1.3 cpu虚拟化性能瓶颈
1.4 虚拟化工作原理
虚拟化类型
虚拟化功能
二、Docker容器概述
2.1 Docker是什么
2.2 使用Docker有什么意义
2.3 Docker的使用场景
2.4 Docker引擎(Docker Engine)
2.5 Docker 三要素(核心组件)
2.6 六大名称空间
2.7 资源控制——cgroups
2.8 容器特性
2.9 容器小的架构体系
三、Docker和虚拟化的区别
总结
1、什么是docker?docker原理?
2、简述Docker主要使用的技术?
Namespace:资源隔离(名称空间)
3、简述Docker体系架构?
4、Docker有哪些优势?和虚拟化比有什么优势?
5.如何把多个目录挂载到同一个目录下?
——> 延伸出——>能否将这三种服务分别封装起来——>KVM虚拟化技术,实现了一个操作系统模拟多个操作系统/不同的运行时环境
——>延伸出容器技术
虚拟化层的抽象层(用户层)剥离,使用docker engine来替代(来宾操作系统去除),只要通过引擎就可以直接连接到宿主机操作系统中,极大减小了开销
虚拟化:将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率
cpu分片后每个任务处理性能会打对折。
虚拟化功能:
①.在一个操作系统内,模拟多个操作系统
②.以软件的方式模拟物理设备的功能
虚拟机管理器功能:调用资源
两大核心组件:QEMU、KVM
QEMU:
①可以理解为队列,核心目的是**调用资源内核中的资源**,需要把KVM逻辑分割出来的资源运输给QEMU,再给虚拟机。
②QEMU它并不是直接调用,而是用I/O方式调用,QEMU把资源调用来的过程借用ioctl,QEMU借助libvirt这个工具调用ioctl,再通过接口,给虚拟机应用程序。
KVM:
①用来逻辑分割物理资源,抽象化为虚拟化资源,根据VMM里的配置,会逻辑分割出多少G,给应用程序,去进行虚拟化。
②只接受来自QEMU的请求指令。对于应用程序直接过来的敏感指令会拦截,然后通过接口发给QEMU,让QEMU判断是否需要执行,可以的话,再下来,不可以的话,打回去,不执行该敏感指令。
对于workstation而言——》硬件辅助虚拟化,表现形式在处理器里面有一个虚拟化引擎,可以勾取硬件辅助虚拟化,看到虚拟接口/dev/kvm,可以加强辅助调用,在应用程序需要频繁调用的时候,需要开启。比如openstack。
全虚拟化:KVM——》产品vmware—ce
半虚拟化:EXSI——》workststion vsphere
①在一个操作系统内,模拟多个操作系统
② 以软件的方式模拟物理设备的功能
容器基础概念—》六大名称空间
名称空间:以不同空间划分不同资源
是一种轻量级的“虚拟机”,Docker是一个用于开发,交付和运行应用程序的开放平台。
在Linux容器里运行应用的开源工具——》容器引擎,让开发者可以打包大门的应用及依赖包到一个可移植的镜像中,然后发布到任何流行的linux或者window机器中。
Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。
鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。
Docker的设计宗旨:Build,Ship and Run Any App,Anywhere
即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。
把容器化技术做成了标准化平台
镜像——》封装的一个时刻的服务/应用状态
容器——》应用跑起来的状态(正常提供服务的状态 - 运行时)
①打包应用程序部署简单
②可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦)例如:需要把服务器从腾讯云迁移到阿里云,如果采用的是 Docker 容器技术,整个迁移的过程只需要在新的服务器上启动我们需要的容器就可以了。
③适合做微服务的部署
④适合持续集成和持续交付(CI/CD):开发到测试发布
Docker Engine是具有以下主要组件的客户端-服务器(C/S架构)应用程序:
server端:服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。
client端:REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。
命令行界面(cLI)客户端((docker命令)。
docker run
docker start
docker rm
Docker images:镜像:统一的封装方式——》模板
Docker container:容器:统一的运行时环境 ——》基于镜像,运行状态/运行时状态
Docker registry:镜像仓库:放置镜像的仓库——》存放镜像模板
存储镜像的地方,默认在公共的 Docker Hub上查找,可以搞个人仓库。
仓库大类:①公共仓库—》docker hub ②私有仓库registry harbor
namespace资源隔离——用容器技术封装
特性——》性能损耗10-20%
- 容器是依赖于内核来隔离,彼此的关系像共享一样,所以安全性较之虚拟机差一些,毕竟不是完全隔离。所以若一个容器被黑客攻破,宿主机基本也就没了。
- 这里也不是完全没有办法,那就是 cgroup 资源分配,其能提供一定的安全机制
docker本质就是宿主机的一个进程, docker是通过namespace(命名空间)实现资源隔离,通过cgroup,实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘50og)
①.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**目录下。
docker把容器化技术做成了标准化平台,只要安装了docker引擎,就能使用docker。
使用docker有什么意义(实现了3个统一)
1、docker引擎统一了基础设施环境-docker环境——>image——>封装一一个简易的操作系统(3.0+G)
2、docker引擎统一了 程序打包(装箱/封装-类比于集装箱)方式-docker镜像——>images
3、docker引擎统—了程序部署(运行)方式-docker容器——>基于镜像——>运行为容器(可运行的环境)
实现了一次构建,多次、多处使用。
(存储引擎)overlay2(现在使用) 和 (存储引擎) aufs(早期使用)叠加式文件系统
es
docker引擎统—了程序部署(运行)方式-docker容器——>基于镜像——>运行为容器(可运行的环境)