​ 我们平时判断一个电脑的性能主要看什么?磁盘读写?CPU的主频高低?还是内存的大小?可是作为个人使用者来说,这些参数高一些足够我们去使用了,可是对于一个大型系统甚至是超大型系统,当前的硬件是远远达不到的。而作为当前的云计算时代,虚拟化技术就发挥了自己的独特的作用。

​ 随着信息技术的快速发展,虚拟化技术也在不断的丰富和创新。从20世纪60年代的IBM推出大型主机虚拟机到现在的X86平台上的虚拟化,虚拟化既可以通过硬件模拟来实现,同时也可通过操作系统来实现,而当前的容器虚拟化就是充分地利用了操作系统的机制和特性,实现轻量级的虚拟化,在这些虚拟化技术中,Docker又是其中的佼佼者。

一、什么是Docker

1、Docker一个开源项目

​ Docker是一个基于Go语言实现的云开源项目,它诞生于2013年,最初发起者未dotCloud公司。目前Docker已经成为了一个生态体系,并已加入Linux基金会,遵循Apache2.0协议。目前主流的Linux操作系统都支持Docker,而Docker的主要目标是通过对应用组件的封装、分发、部署、运行等生命周期的管理,达到应用组件(Web应用 / 数据库服务 / 操作系统或编译器等)级别的“一次封装,到处运行”。

2、Linux容器技术

​ Docker引擎的基础就是Linux容器(Linux Containers,LXC)技术。对于容器技术,IBM DeveloperWorks给出了描述:容器有效地将由单个操作系统管理的资源划分到孤立的组中,以便更好地在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这即不需要指令级模拟,也不需要即时编译。容器可以在核心CPU本地运行指令,而不需要任何专门的解释机制。同时也避免了准虚拟化和系统调用替换中的复杂性。

​ 当然Linux容器也并不是一个全新的概念,只是后来LXC项目借鉴了前人成熟的容器设计理念,并基于一些新的内核特性实现了扩展性的虚拟化容器技术。关键的是,LXC由此被集成到了Linux内核中,而成为Linux系统轻量级容器技术的事实标准。

3、从Linux容器到Docker

​ 在Linux容器技术的基础上,Docker优化了容器的使用体验。同时,Docker提供了各种容器管理工具让用户无需关注底层的操作,可以简单地管理和使用。

二、为什么要使用Docker

1、Docker容器虚拟化的好处

​ 高效地构建应用,开发者能方便地创建运行在云平台上的应用,应用能够脱离底层机器,同时在任何时间和任何地点都是可获取的。而Docker提供容器打包应用,当我们在迁移系统时,只要启动需要的容器就可以了。这将节约时间,并降低部署过程出现问题的风险。

2、Docker在开发和运维中的优势

​ 对于开发和运维人员来说,最理想的就是一次性地创建和配置,可以在任意环境、任意时间让应用正常地运行。而Docker即可实现:1、更快速的交付和部署。2、更高效的资源利用。3、更轻松的迁移和扩展。4、更简单的更新管理。

3、Docker与虚拟机对比

​ 作为轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著的优势:

​ 1、Docker容器更快,启动和停止都是秒级。

​ 2、Docker容器对系统资源需求更少。

​ 3、Docker指令简明,学习成本底。

​ 4、Docker通过Dockerfile配置文件支持灵活的自动化创建和部署机制,提高工作效率。

特性 容器 虚拟机
启动速度 秒级 分钟级
硬盘使用 一般未MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个
隔离性 安全隔离 完全隔离

三、虚拟化与Docker比较

​ 虚拟化技术是一个通用的概念,在不同的领域有不同的理解。而在计算领域,一般指的是计算虚拟化或服务器虚拟化。虚拟化的核心是对资源进行抽象,目标为在同一机器上运行多个系统或应用,提高系统资源的利用率,同时降低成本、方便管理和容错容灾等好处。

​ 从类型区分,虚拟化技术可分为基于硬件的虚拟化和基于软件的虚拟化。而我们一般讨论的都是基于软件的虚拟化,而基于软件的虚拟化从对象层次上又分为应用虚拟化和平台虚拟化。其中主要讨论的又是平台虚拟化,平台虚拟化又可分为完全虚拟化、硬件辅助虚拟化、部分虚拟化、超虚拟化、操作系统级虚拟化。而Docker就属于操作系统级虚拟化。

​ 表1:传统的虚拟化方式

应用程序 应用程序
运行时环境 运行时环境
虚拟机操作系统 虚拟机操作系统
虚拟机管理程序
宿主机操作系统
硬件层

​ 表2:Docker的虚拟化方式

应用程序 应用程序
运行时环境 运行时环境
Docker容器支持
宿主机操作系统
硬件层

最新文章

  1. 了解了这些才能开始发挥jQuery的威力
  2. SAP用户权限解剖及自修改
  3. plsqldevloper + orcal环境搭建
  4. JMeter正则表达式-学习(3)
  5. Java 泛型和通配符解惑
  6. JS学习笔记10_Ajax
  7. ruby -- 问题解决(三)编码错误导致无法显示(1)
  8. Atom markdown .md 编写格式技巧
  9. freetds链接错误
  10. Entity Framework问题:ReferentialConstraint 中的依赖属性映射由存储生成的列
  11. JavaScript高级程序设计40.pdf
  12. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(36)-文章发布系统③-kindeditor使用
  13. [CentOS 0010] CentOS 配置mysql允许远程登录
  14. ExtJS+ASP.NET自己定义曲线
  15. 详解 try-with-resource
  16. C语言第七次作业
  17. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用FairyGUI (一)
  18. 美图秀秀api实现图片的裁剪及美化
  19. [SQL]LeetCode596. 超过5名学生的课 | Classes More Than 5 Students
  20. tomcat 配置 使用 HTTPS

热门文章

  1. 聊聊RabbitMQ那一些事儿之一基础应用
  2. 微信小程序学习 动手撸一个校园网小程序
  3. 使用 custom element 创建自定义元素
  4. C++对拍
  5. Yuchuan_Linux_C编程之五gdb调试
  6. SPI总线传输的4种模式
  7. DEV GridControl控件使用(CheckBox全选、操作按钮、事件处理,获取值)
  8. 有关于python内置函数exec和eval一些见解笔记
  9. pyppeteer使用时常见的bug及基本使用(转)
  10. 1.JVM中的五大内存区域划分详解及快速扫盲