1.虚拟化技术的概念

(1)虚拟化技术主要是将物理的资源转变为逻辑上可以管理的资源,以打破物理结构上的壁垒,让计算元件运行在虚拟的基础上,而不是真实的物理资源上。
(2)虚拟化技术的底层是要进行虚拟化的 物理机硬件设备,通过虚拟化技术软件,可以将物理机虚拟生成N台虚拟机;应用程序、软件服务都可运行在虚拟机上,而不是直接运行在物理机设备上。

2.虚拟化技术的意义

(1)虚拟化技术主要是为了最大化的利用高配物理机的资源,提高资源的利用率,降低企业硬件成本、维护和管理成本。
(2)淘汰老旧服务器资源,对老旧服务器资源进行重组重用。
(3)加快企业服务器资源高效的管理和自动化运维的进程。
例:企业生产环境,要求部署100个nginx服务,要求nginx服务独立部署,用户可以独立访问,可以使用如下方案:
1)采购100台硬件服务器,标准配置(4C8G100GB),每台服务器部署1个nginx服务;
2)采购10台高配硬件服务器,每台硬件服务器虚拟10台虚拟机(4C8G100GB),每个虚拟机服务部署一个nginx服务。
注:从费用成本、维护成本考虑,应选择第二种方案。

3.目前主流的虚拟化技术

(1)KVM
(2)VMware ESXI
(3)XEN
(4)VirtualBox
(5)Open-vz
(6)Hper-v
(7)Docker

4.虚拟化技术的种类

(1)完全虚拟化技术:实际上是通过软件实现对操作系统的资源再分配,比较成熟。例如:KVM、VirtualBox
(2)半虚拟化技术:通过代码修改已有的系统,形成一种新的可虚拟化的系统,调用硬件资源去安装多个操作系统,整体速度相对快一些。例如:Xen
(3)轻量级虚拟化技术:介于完全虚拟化和半虚拟化之间。例如:Docker虚拟化 

5.docker虚拟化简介

(1)Docker是一个开源的应用容器引擎,让开发者可以打包他们的 应用以及依赖包 到一个可移植的容器中,然后发布到任何流行的Linux机器上。
(2)容器时完全使用沙箱机制,相互之间不会有任何接口;几乎没有性能开销,可以很容易地在机器和数据中心中运行;不依赖任何语言、框架、系统。
(3)Docker的基础是Linux容器(LXC),在LXC的基础上Docker进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。
(4)用户操作Docker的容器就像操作一个快速轻量级的虚拟机一样简单。 

6.Docker虚拟化和传统虚拟化的不同

(1)Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统。
(2)传统虚拟化则是在硬件的基础上,虚拟出自己的系统,然后在系统上部署相关的应用。

7.镜像、容器、仓库

(1)镜像:Docker镜像跟Linux ISO镜像类似,主要是存储各种应用程序、软件服务、各种数据等。Docker镜像内容是只读的,不能被修改。
(2)容器:Docker容器是基于Docker镜像运行之后的实例,类似进程和程序的关系。Docker容器是可读、可写的,但不能直接修改镜像的数据内容,镜像是持续为容器提供服务,没有镜像就没有容器。
(3)仓库:存放镜像的地方,分为公共仓库和私有仓库。企业测试、生产环境 推荐自建私有仓库,安全、稳定、高效。

8.Docker的Linux容器(LXC)和CGroup

(1)CGroup在最底层落实资源管理,LXC在CGroup上封装了一层,Docker又在LXC上封装了一次。

(2)CGroup是control groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组所使用的物理资源的机制。

(3)没有CGroup就没有LXC,也就没有Docker。

(4)LXC可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制 以及全虚拟化的其他复杂性。

(5)LXC有效地将 由单个操作系统管理的资源 划分到孤立的组中,以更好地在孤立的组之间 平衡有冲突的资源使用需求。

(6)LXC建立在CGroup基础上,LXC=CGroup+namespace+Chroot+veth+用户态控制脚本。

(7)LXC利用内核的新特性(CGroup)来提供用户空间的对象,用来保证资源的隔离和对于应用或者系统的资源控制。

注1:典型的Linux系统由bootfs和rootfs两部分组成。

(1)bootfs(boot file system)主要包含bootloader和kernel;bootloader主要是引导加载kernel,当kernel被加载到内存中后,bootfs就被卸载(umount)。

(2)rootfs(root file system)包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等目录和文件。

注2:

(1)Docker容器的文件系统最早建立在AUFS基础上。

(2)AUFS(another union file system),是一种Union FS,支持将不同的目录挂载到同一个虚拟文件系统下,并实现一种层(layer)的概念。

(3)由于AUFS未能加入到Linux内核,因考虑兼容性问题,加入了DeviceMapper的支持。Docker目前默认运行在DeviceMapper基础上。

注3:

(1)AUFS将挂载到同一虚拟文件系统下的多个目录分别设置成read-only、read-write、whiteout-able权限。

(2)对read-only目录只能读,而写操作只能实施在read-write目录中。

(3)写操作是在read-only上的一种增量操作,不影响read-write目录。当挂载目录的时候,要严格按照各目录之间的这种增量关系,将被增量操作的目录优先于 在他基础上增量操作的 目录挂载,待所有目录挂载结束,继续挂载一个read-write目录,如此形成一种层次结构。

注4:

(1)传统的Linux加载bootfs时,会先将rootfs设为read-only,然后在系统自检之后将rootfs从read-only改为read-write,然后就可以在rootfs上进行写和读的操作。

(2)Docker的镜像却不想上述那样,它在bootfs自检完毕之后并不会把rootfs的read-only改为read-write。而是利用union mount(UnionFS的一种挂载机制) 将一个或多个read-only的rootfs加载到之前的read-only的rootfs层之上。

(3)在加载了多层的rootfs之后,仍然让它看起来只像一个文件系统,在Docker的体系里,把union mount的这些read-only的rootfs叫做 Docker的镜像。但此时的每一层rootfs都是read-only的,还不能对其进行操作。

(4)当创建一个容器,也就是将Docker镜像进行实例化,系统会在一层或是多层read-only的rootfs之上分配一层空的read-write的rootfs。

9.Device Mapper

(1)Device Mapper是Linux2.6内核中支持逻辑卷管理的通用设备映射机制,它为实现 用于存储资源管理的 块设备驱动 提供一个高度模块化的内核架构。

(2)在内核中,它通过一个一个模块化的target driver插件实现对IO请求的过滤或者重定向等工作。

(3)当前已经实现的target driver(目标驱动程序)插件包括:raid、软加密、逻辑卷条带、多路径、镜像、快照等。途中linear、mirror、snapshot、multipath表示的就是这些目标驱动程序。

(4)Device Mapper进一步体现了Linux内核涉及中 策略和机制分离的原则,将所有与策略相关的工作放到用户空间完成,内核中主要提供完成这些策略所需要的机制。

注:

(1)Device Mapper用户空间相关部分,主要负责配置具体的策略和控制逻辑,比如逻辑设备和哪些物理设备建立映射,怎么建立这些映射关系等。

(2)具体过滤和重定向IO请求的工作由内核中相关代码完成。

(3)因此,整个Device Mapper机制由两部分组成:内核空间的Device Mapper驱动、用户空间的Device Mapper库以及它提供的dmsetup工具。

10.Docker虚拟化的特点

(1)操作启动快

  • 运行时的性能可以获取极大提升,管理操作(启动、停止、重启等)都是以秒或毫秒为单位。

(2)轻量级虚拟化

  • 仅需添加或减小镜像,就可以获得足够的“操作系统”。只要配置够高,一台服务器上可以虚拟出100台以上的容器。

(3)开源免费

  • 开源免费,成本低。由现代Linux内核支持并驱动。

(4)前景及云支持

  • 正越来越受欢迎,各大主流公司都在推动Docker的发展,性能有很大的优势。

(5)跟传统VM比较,具有以下缺点

  • 目前知道的人比较少;
  • 相关的中文技术资料欠缺;
  • Go语言还未完全成熟;

11.Docker的优势

(1)交付和部署更快速

  • Docker允许开发者在装有应用和服务的本地容器做开发。可以直接集成到可持续开发流程中。
  • 开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。
  • Docker可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。
  • 启动时间是秒级的,大量节约开发、测试、部署的时间。

(2)部署和扩容更高效

  • Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序 从一个平台直接迁移到另一个平台。
  • Docker的兼容性和轻量特性可以很轻松的实现负载的动态管理。你可以快速扩容 或 下线你的应用和服务。

(3)资源利用率更高

  • 一台主机上可以同时运行数千个Docker容器。
  • 容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高。
  • 传统虚拟机方式运行10个不同的应用就要启动10个虚拟机,而Docker只需启动10个隔离的应用即可。

(4)管理更方便

  • 使用Docker,只需小小的修改,就可以替代以往大量的更新工作。
  • 所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

12.Docker引擎架构

(1)Docker引擎是一个C/S结构的应用 。

(2)server是一个常驻进程。

(3)REST API实现了client和server间的交互协议。

(4)CLI实现容器和镜像的管理,为用户提供统一的操作界面。

(5)Client通过接口 与 Server进程通信,实现容器的构建、运行和发布。

(6)Client和Server可以运行在同一台集群,也可以通过跨主机实现远程通信。

13.Docker镜像原理

(1)一个完整的Docker镜像可以支撑一个Docker容器的运行;在Docker容器运行的过程中,主要提供文件系统数据支撑。

(2)Docker镜像有以下特性

  • 镜像分层,每个镜像都由一个或多个镜像层组成。
  • 可以通过在某个镜像上 加一定的镜像层 得到新镜像。(此过程可以通过编写dockerfile 或 基于容器commit实现)
  • 每个镜像层都拥有唯一镜像ID。
  • 镜像在存储和使用时,会根据ID共享相同的镜像层,所以在pull镜像时,已有的镜像层会自动跳过下载。
  • 每个镜像层都是只读,即使启动成容器,也无法对其真正的修改,修改只会作用于最上层的容器层。

(3)Docker容器,可以理解为一个或多个运行进程,这些运行进程占有相应的内存、CPU、虚拟网络设备、文件系统 等资源。

(4)Docker容器所占用的文件系统资源,通过Docker镜像的镜像层文件来提供。

(5)Docker可以通过解析Docker镜像的json文件,获知应该在这个镜像之上运行什么样的进程,应该为进程配置怎么样的环境变量,Docker守护进程实现了静态向动态的转变。

Docker虚拟化之<基础理论>的更多相关文章

  1. XP+devOps开发模式与scrum敏捷开发对比,docker虚拟化

    XP+devOps开发模式与scrum敏捷开发对比,docker虚拟化 我们现在用的就是典型的XP+devOps模式,已经放弃scrum了 现在还很多公司弄docker虚拟化docker非常复杂,当然 ...

  2. Docker虚拟化平台

    1.虚拟化技术的概念 1)虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构间的壁垒,让计算机的元件运行在虚拟的基础上,而不是真实的物理设备: 2)虚拟化技术可以将物理机硬件资源虚拟生成单 ...

  3. Docker虚拟化实战学习——基础篇(转)

    Docker虚拟化实战学习——基础篇 2018年05月26日 02:17:24 北纬34度停留 阅读数:773更多 个人分类: Docker   Docker虚拟化实战和企业案例演练 深入剖析虚拟化技 ...

  4. Docker虚拟化

    1. Docker虚拟化特点 跟传统VM比较具有如下优点: 操作启动快 运行时的性能可以获取极大提升,管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的. 轻量级虚拟化 你会拥有足够的“操 ...

  5. 1、Docker部署及基础理论

    1.Docker入门简介 Docker技术类似码头上看到的集装箱,最早集装箱没有出现的时候,码头上有许多搬运的工人在搬运货物,有了集装箱以后,搬运货物变得简单,通过集装箱的搬运模式更加单一.高效,将货 ...

  6. docker虚拟化平台构建

    docker虚拟化平台构建 从1.13版本以后的docker软件分为连个版本:企业版.社区版,在企业中推荐社区版本. 构建docker平台环境,系统选择centos7.x,推荐linux内核3.10 ...

  7. Linux运维之docker虚拟化部署nginx

    一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱 ...

  8. 基于docker虚拟化创建hadoop集群

    最近想用hadoop做一个测试,与性能无关的测试,但是可与屌丝的命,手头没有太多机器,也租不起云主机.这里使用docker进行虚拟化,并搭建hadoop集群,在这里将过程记录如下. 首先安装docke ...

  9. Docker虚拟化容器的使用

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Li ...

随机推荐

  1. 面经-VIVO

    面试时间:2019.09.26 现场面试 面试岗位:广告推荐算法工程师/一面/正式批 面试时长:50Min 面试内容: 自我介绍 阶乘与阶乘和(复杂度高) 文本-视频论文讲解 视频排序讲解 概率题(2 ...

  2. CSPS模拟 100

    我又挂分了T_T 这么吉利的数字..本来想考的好一点的 T1 没加当前弧优化(其实也不会),若志了 各种低错连篇而且没想到点不联通..没有奇度点就直接从1开始搜了 于是喜提70(犯了这两个若志错误应该 ...

  3. centos下docker离线部署

    安装准备 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化. 环境要求 Centos 安装包下载地址 安装包下载以下 ...

  4. Charles破解安装及基本使用

    一.Charles简介 1.Charles是一款代理服务器,通过成为电脑或者浏览器的代理,而后截取请求和请求结果达到抓包目的. 2.Charles是用Java写的,能够在Windows,Mac,Lin ...

  5. vue+element UI递归方式实现多级导航菜单

    介绍 这是一个是基于element-UI的导航菜单组件基础上,进行了二次封装的菜单组件,该组件以组件递归的方式,实现了可根据从后端接收到的json菜单数据,动态渲染多级菜单的功能. 使用方法 由于该组 ...

  6. python学习之【第十五篇】:Python中的常用模块之time模块

    1.前言 在Python中,对时间的表示或操作通常要使用到time模块.本篇博文就来记录一下time模块中常用的几种时间表示转换方法. 2. 三种时间表示形式 2.1 时间戳 从1970年1月1日零点 ...

  7. StringBuffer 和 StringBuilde

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  8. python——自行实现sorted函数

    仿照内建函数sorted,自行实现一个sort函数,能够为列表进行排序 看下面实例的前提是掌握 0.掌握sorted函数的用法.1.函数基本概念.2.函数是如何传参的.3.掌握三元表达式.4.掌握内建 ...

  9. PHP判断数组下标有没有存在的方法

    PHP判断数组下标有没有存在的方法<pre>if(!empty($token['errcode'])){ print_r($token['errmsg']); exit();}</p ...

  10. Git如何fork别人的仓库并作为贡献者提交代码

    例如 要fork一份google的MLperf/inference代码,下面介绍具体做法:预备知识git里的参考有几种表示,分别是上游仓库,远程仓库和本地仓库,逻辑关系如下拉取代码的顺序:别的大牛的代 ...