1 虚拟化

虚拟化是为一些组件(例如虚拟应用、服务器、存储和网络)创建基于软件的(或虚拟)表现形式的过程。它是降低所有规模企业的 IT 开销,同时提高其效率和敏捷性的最有效方式。

1.1 虚拟化用于程序跨平台兼容

要实现程序跨平台兼容的方法其实很简单,只要操作系统或者物理硬件所提供的接口调用方式一致,程序便不需要兼容不同硬件平台的接口,而只需要针对这一套统一的接口开发即可。

虚拟化技术正是通过其本身适配不同平台的硬件,而加以抽象成统一的接口,来实现程序跨平台运行这一目的的。

1.2 虚拟化用于资源管理

通过虚拟化技术来管理计算机资源的方式,不但让我们对计算机资源的控制变得更加灵活,也大幅提高了计算机资源的使用率。

虚拟化技术能够提高计算机资源的使用率,是指利用虚拟化,我们可以将原来程序用不到的一些资源拿出来,分享给另外一些程序,让计算机资源不被浪费。

虽然我们能够在操作系统里同时运行多个程序,但前提得是这些程序本身不存在冲突。这里的冲突体现在很多的方面,例如不同的程序同时使用了同一个端口;不同程序依赖于同一个工具库的不同版本;程序本身限制了同时开启的进程数等。虚拟化技术通过资源隔离的方式,无形地也可以把这些程序隔离在不同的虚拟环境中,既然虚拟环境不同,自然运行在不同环境中的程序就不会互相干扰或争抢资源了。

1.3 虚拟化的分类

  • 硬件虚拟化
    所谓硬件虚拟化,指的是物理硬件本身就提供虚拟化的支持。举个例子来说,某个平台的 CPU,能够将另外一个平台的指令集转换为自身的指令集执行,并给程序完全运行在那个平台上的感觉。例如Intel VT、AMD-V

  • 软件虚拟化
    而软件虚拟化则指的是通过软件的方式来实现虚拟化中关键的指令转换部分。依然用 CPU 的例子来说话,在软件虚拟化实现中,通过一层夹杂在应用程序和硬件平台上的虚拟化实现软件来进行指令的转换

1.4 平台虚拟化分类:

  1. 完全虚拟化:原来运行在物理硬件上的操作系统和软件,完全不用修改就可以直接运行在虚拟机中。

全虚拟化(FullVirtualization)也称为原始虚拟化技术,该模型使用虚拟机协调Guest操作系统和原始硬件,VMM在Guest操作系统和裸硬件之间用于工作协调,一些受保护指令必须由Hypervisor(虚拟机管理程序)来捕获处理

  1. 半虚拟化:是一种修改Guest OS部分访问特权状态的代码以便直接与VMM交互的技术。

在虚拟客户操作系统中加入特定的虚拟化指令,通过这些指令可以直接通过Hypervisor层调用硬件资源,免除有hypervisor层转换指令的性能开销
半虚拟化需要Guest操作系统做一些修改,使Guest操作系统意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能。

  1. 操作系统虚拟化:是一种轻量级的虚拟化技术,让内核通过创建多个虚拟的操作系统实例来隔离不同的进程,不同实例中的进程完全不了解对方的存在。这些实例也被称之为容器

1.5 虚拟机

一种叫虚拟机监控程序的软件会把资源与物理机分隔开,以便进行分区并专门用于虚拟机。通常来说就是通过一个虚拟机监视器 ( Virtual Machine Monitor ) 的设施来隔离操作系统与硬件或者应用程序和操作系统,以此达到虚拟化的目的。这个夹在其中的虚拟机监视器,常常被称为 Hypervisor。

当用户发出需要从物理环境中获取更多资源的虚拟机指令时,虚拟机监控程序就会将该请求转发到物理系统并将更改放到缓存中。

从作用上来看,虚拟机就像物理服务器,它会成倍放大应用依赖项和大量 OS 占用空间(而运行单个应用或微服务往往并不需要这么大的占用空间)造成的弊端。

2. 容器

所谓容器技术,指的是操作系统自身支持一些接口,能够让应用程序间可以互不干扰的独立运行,并且能够对其在运行中所使用的资源进行干预。由于应用程序的运行被隔离在了一个独立的运行环境之中,这个独立的运行环境就好似一个容器,包裹住了应用程序,这就是容器技术名字的由来

容器中包含了微服务或应用及运行所需的一切要素。容器中的所有内容都保存在镜像(一个基于代码且包含所有库和依赖项的文件)上。我们可以将这些文件视为 Linux 发行版的一个安装实例,因为镜像中包含 RPM 软件包和配置文件。由于容器是如此之小,因此通常会有数百个容器松散地耦合在一起,所以要使用容器编排平台(例如红帽 OpenShift 和 Kubernetes)来置备和管理它们。

3. 虚拟机 VS 容器

由于没有了虚拟操作系统和虚拟机监视器这两个层次,大幅减少了应用程序运行带来的额外消耗。

更准确的来说,所有在容器中的应用程序其实完全运行在了宿主操作系统中,与其他真实运行在其中的应用程序在指令运行层面是完全没有任何区别的。


相比虚拟机,容器最适合用于

  • 构建云原生应用
  • 封装微服务
  • 拓展 DevOps 或 CI/CD 实践
  • 在共享同一操作系统的多样化 IT 环境中移动可扩展的 IT 项目

与单个容器相比,虚拟机能够运行更多的操作,因而它们一直是(现在也是)封装单体式工作负载的惯用方式。但是,由于对操作系统、应用和库的依赖性,这种扩展功能也令虚拟机的可移植性大大降低。相比容器,虚拟机最适合用于

  • 存放传统的单体式工作负载
  • 隔离存在风险的开发周期
  • 置备基础架构资源(如网络、服务器和数据)
  • 在另一个操作系统内运行不同的操作系统(例如在 Linux 上运行 Unix)

参考资料

《开发者必备的 Docker 实践指南》

Docker 入门(1)虚拟化和容器相关推荐

  1. Docker 入门实战-ssh连接容器

    本文首发于个人博客 在文章开始之前先说一个好消息:  年前会有一次视频分享,所有视频都已经归类,另外还有一次赠书活动,敬请期待. 下面是个人博客原文: 实验环境: centos7 [html] vie ...

  2. Docker入门六部曲——容器

    原文链接:http://www.dubby.cn/detail.html?id=8734 准备 已经安装好Docker 1.13或者以上的版本. 读完的上一篇文章(基本引导). 简单的测试一下你的本地 ...

  3. Marco's Java【Docker入门(四) 之 Dockerfile容器数据卷详解】

    前言 咱们上节已经接触过Dockerfile并使用Dockerfile创建容器数据卷,但是Dockerfile的作用远远不止如此! 因此本节会更深入的了解Dockerfile以及它的诸多使用方式, & ...

  4. Docker入门与实战讲解

    × 首页 博客 学院 下载 GitChat TinyMind 论坛 问答 商城 VIP 活动 招聘 ITeye CSTO 写博客 发Chat 登录注册 relax_hb的博客 RSS订阅 原 Dock ...

  5. Docker入门六部曲——Swarm

    原文链接:http://www.dubby.cn/detail.html?id=8738 准备工作 安装Docker(版本最低1.13). 安装好Docker Compose,上一篇文章介绍过的. 安 ...

  6. Docker入门六部曲——服务

    原文链接:http://www.dubby.cn/detail.html?id=8735 准备 已经安装好Docker 1.13或者以上的版本. 安装好Docker Compose.如果你是用的是Do ...

  7. docker入门(基于虚拟化技术)

    docker入门(基于虚拟化技术) 两个概念1.分布式部署:是指在多台不同的服务器中部署不同的服务模块,通过远程调用协同工作,对外提供和服务.2.集群部署:在多台不同的服务器中部署相同的应用或者服务模 ...

  8. 容器化技术最佳实践1--容器化技术简介与Docker入门

    容器化技术最佳实践1–容器化技术简介与Docker入门 文章目录 容器化技术最佳实践1--容器化技术简介与Docker入门 容器化简介 通过虚拟化了解容器化 对开发和运维的好处 容器化部署特点 什么情 ...

  9. Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别

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

  10. Docker入门(一) - 仓库、容器、镜像、数据卷

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

最新文章

  1. CTFshow php特性 web103
  2. 叶明哲 | 数据中心空调文章集锦
  3. boost::iostreams模块实现具有64位大文件偏移量的测试程序
  4. cad直线和圆弧倒角不相切_曲线操作-直线,圆弧,圆,倒斜角
  5. linux diff 远程文件,登录diff命令,以单独的文件输出在linux
  6. MyCat分布式数据库集群架构工作笔记0001---Mycat简介
  7. spark节点安装numpy(在线方式,最简洁方式)
  8. 斐波那契数的两种实现方式———1.递归实现,2迭代实现
  9. [Ubuntu] apache .htaccess根据访问的域名指向不同的目录
  10. bzoj 4001: [TJOI2015]概率论(找规律)
  11. Java基础篇:嵌套 if 语句
  12. windows下dump文件调试
  13. pat-A1043:Is it a Binary Search Tree(二叉搜索树和及其镜像树的遍历)
  14. Anylogic------------数据库
  15. visual basic与python_学visual basic还是 python?
  16. 【互联网人必备】最实用的6大专业搜索工具
  17. 两位共阳极数码管c语言,89c51驱动两位共阳极数码管倒计时显示程序,60秒到30秒能实现,但从30秒到90秒不能实现,请高手帮忙!...
  18. php自动生成phpunit,PHP单元测试框架PHPUnit的使用
  19. 计算机图形学透视投影知识点,计算机图形学
  20. MSM搭建(Memcached_Session_Manager)--解决集群session共享

热门文章

  1. 2020-12-15 CPU设计复盘
  2. 知乎大V推荐!面试官6个灵魂拷问,原理+实战+视频+源码
  3. 快递100接口的调用过程
  4. 关于秒杀系统优化方向
  5. 【python】numpy库linspace相同间隔采样 详解
  6. mvn编写主代码与测试代码
  7. JavaScript随笔一篇
  8. android模拟用户输入
  9. 阿里云天池 Python训练营Task3: Python基础进阶:从函数到高级魔法方法 学习笔记
  10. Flink DataStream 编程入门