基于高度虚拟化所诞生的容器技术,如今已经走向大规模应用。那么容器、虚拟机、Docker、Openstack、Kubernetes 之间又有什么关系,对现在的选择有什么影响呢?

上世纪 60 年代,计算机是一种稀有商品。即便只租不买,每月也要花一千多美元,这使许多企业都无法承受。而且早期的计算机通常专用于某一项特定的任务,需要同时在许多用户之间共享计算机资源,并且可能花费几天甚至几周的时间才能运行完毕。俗话说:“需求是发明之母”,有了需求人们就会去发明创造来满足需求。计算机的历史也不例外,过于昂贵的费用和长时间的共享需求刺激了虚拟化的逐渐发展。

Docker 与容器

基于需求刺激,容器技术应运而生。容器的发展从 Chroot,FreeBSD jails,OpenVZ,LXC,到如今的 Docker、Rocket 真正走向了大规模应用。

相比普通服务器,容器是一种更轻量级,更灵活的虚拟化处理方式,它将一个应用程序所需的一切打包在一起。一般情况下开发人员在编写代码时,他们是在自己本地的开发环境中工作;当他们准备将代码移至生产环境时,总会发生一些意想不到的事情。原因多种多样:不同的操作系统,不同的依赖项,不同的库。

而容器解决了可移植性这一关键问题,它可以将代码与运行它的环境分开。开发人员可以将应用程序(包括正确运行所需的所有库)打包到一个小的容器镜像中。该镜像可以在其他任何计算机上运行。

Docker 的兴起

虽然 Docker 经常会和“容器(Container)”一词相提并论,但是 Docker 本身并不是容器。从字面意思可以解读,“Container”原译为“集装箱”,而“Docker”被译为“码头工人”。

Docker 是一个开源的应用容器引擎,是创建容器的工具。让开发者可以打包他们的应用和依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上。

2013 年 PyCon 大会之后,Docker 迅速成为社区、客户和更广泛行业的实际标准与基石。Docker 的强大之处在于它通过可移植的形式和易于使用的工具,在应用程序和基础设施之间创造了独立性,使得容器技术大众化,并使容器技术成为主流。

Docker 如此大火,但是我们需要知道,Docker 并不是唯一的,也不是第一个出现的容器平台。其他的框架,例如 OpenVZ 和 LXC(Linux Container),于 2000 年中期就已经开始使用。而 FreeBSD jails,则可以追溯到更远的年代。Docker 是在 2013 年发布的,与当今大多数主流的容器技术相比,它是非常年轻的。

虽然 Docker 不是最成熟的,却引起了极大的关注。这是因为 Docker 是一个扩展的 Linux 容器(LXC),是一种独特轻巧、以应用为中心的虚拟化工具。它大大降低了企业开销,也更容易让企业在服务器上部署软件。且 Docker 允许系统管理员和开发人员在容器中构建任何应用程序,节省资源。

除此之外,Docker 发展迅猛的原因还有:

  • Docker 从一开始就是开源的,这使得 Docker 在行业内有了强大的吸引力。直到 2013 年,行业才开始将“开源”视为软件生产的默认模式。

  • Docker 出现在了正确的时间。到 2013 年,虚拟机似乎已经成为了过时的技术。大家一直在寻找一种更精简,更方便的方式来部署应用程序,而这时 Docker 出现了,它恰好符合要求。

  • Docker 使用的另一个主要重点是 DevOps。DevOps 在 2010 年初开始流行,它强调了软件交付的敏捷性、灵活性和可扩展性。Docker 恰好为根据 DevOps 部署应用程序提供了合适的环境。

Docker 与 OpenStack

容器和虚拟机这两种技术经常被互相比较。所谓虚拟机(Virtual Machine)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

Docker 可能被认为是当前容器技术的代表,而作为虚拟机技术的代表,OpenStack 也被大众所周知。

OpenStack 是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。它不是一个软件,而是一个云平台管理的项目。这个项目由几个主要的组件组合起来完成一些具体的工作。其中主要包括:

  • Nova(Compute):在 OpenStack 环境中计算实例(即创建的云主机)的生命周期管理。按需响应包括生成、调度、回收虚拟机等操作。

  • Neutron(Networking):确保为其它 OpenStack 服务提供网络连接即服务。

  • Swift(Object Storage):通过基于 HTTP 的应用程序接口存储和任意检索的非结构化数据对象。

  • Glance(Image service):存储和检索虚拟机磁盘镜像,OpenStack Compute 会在实例部署时使用此服务。

许多人都会常用 Docker 和传统虚拟机来做比较,并且经常凸显出 Docker 的优势。其实这和 OpenStack 没有直接关系。曾经许多的性能测试都会将 Docker 与 KVM 进行对比,但是后来发现这些测试是通过 OpenStack 运行的,这表明两种技术其实可以很好地协同工作。

那么如果使用了 Docker,还能使用 OpenStack 吗?

答案是可以的,Docker 以最简单的形式提供了一个容器,用于管理共享基础架构上的应用程序,同时又使它们彼此隔离。而虚拟机则通过创建一个完整的操作系统来完成类似的工作。OpenStack 的官方文档(https://wiki.openstack.org/wiki/Docker)特别提供了部署 Docker 的解决方案,并且单独指出:“容器并非旨在替代虚拟机,它们是互补的,因为它们更适合特定的用例。”

Docker 与 Kubernetes

如果第一次看到 Kubernetes 这个词,可能会比较好奇它为何简写为 K8S。其实是 k 与 s 中间正好隔了 8 个字母,K8S 为一种偷懒地写法。Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

作为容器编排的解决方案,随着 Kubernetes 越来越流行,“Kubernetes” 与 “Docker” 这两个词也经常会相提并论。

目前,Kubernetes 可以说是市场领导者,及编排容器和部署分布式应用程序的标准化方法。Kubernetes 可以在公共云服务或本地运行,具有高度模块化,开放源代码,并且拥有一个活跃的社区。许多云厂商也都已经提供了 Kubernetes 作为服务。

当然了,Docker 和 Kubernetes 并不是竞争对手。Docker 是一个容器化平台,而 Kubernetes 是 Docker 等容器平台的协调器。它旨在为容器提供高效地管理,监视应用程序的运行状况,使应用程序提供不间断地服务,而不需要运维人员去进行复杂的手工配置和处理。

云计算技术发展至今,从最开始的硬件虚拟化、IaaS、OpenStack、PaaS、容器到如今的 Serverless,云计算已经越来越接近应用逻辑。容器实现了应用的分装,方便了应用在不同环境间的迁移,轻量级的特性又使它能够消耗更少的资源而带来更大的便利。当然,技术更新迭代迅速,我们只有不断学习才能跟上行业的步伐,加油吧,小伙伴们!

推荐阅读

无需额外工具,又小拍的简单抓包教程

检查网上下载“学习资料”的完整性,用这招就够了

读懂这几个关键词,你就能了解 Docker 啦的更多相关文章

  1. 一文读懂UGC:互联网上的生态秘密

    转载自近乎: UGC(User- Generated Content)用户原创生产内容,它是相对于PGC(Professionally-produced Content)专业生产内容的一种内容来源,简 ...

  2. 如何读懂Oracle文档中的语法图(转)

    本文转载自:http://kyle.xlau.org/posts/syntax-diagrams.html Oracle文档中用到了两种表达语法的方法,语法图和BNF. BNF, Backus-Nau ...

  3. [转]一文读懂《梁宁·产品思维30讲》最精华内容(含全套PPT)

    http://chuansong.me/n/2294260949029 8 年前,我的主业是产品经理,产品思维改变了我认识世界的方式,让我明白司空见惯的设计,也有其底层逻辑. 几年后我接触培训.运营自 ...

  4. 【转】如何读懂Oracle文档中的语法图

    转自:http://blog.itpub.net/22990797/viewspace-750157/ Oracle文档中用到了两种表达语法的方法,语法图和BNF. BNF, Backus-Naur ...

  5. 一篇文章读懂JSON

    什么是json? W3C JSON定义修改版: JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式,并不是 ...

  6. 一文读懂MySQL的事务隔离级别及MVCC机制

    回顾前文: 一文学会MySQL的explain工具 一文读懂MySQL的索引结构及查询优化 (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论不一定适用于其他版本) 就软件开 ...

  7. 读懂UI设计的心理学

    好文转载,版权归原作者 作为UI设计师,对待用户就像对待婴儿,知道如何通过界面设计诱导用户非常重要,这就需要了解心理学方面的知识了.今天分享一篇日本设计师的好文,结合心理学与设计,教你读懂心理学,提高 ...

  8. 读懂IL代码就这么简单(三)完结篇

    一 前言 写了两篇关于IL指令相关的文章,分别把值类型与引用类型在 堆与栈上的操作区别详细的写了一遍 这第三篇也是最后一篇,之所以到第三篇就结束了,是因为以我现在的层次,能理解到的都写完了,而且个人认 ...

  9. 读懂IL代码就这么简单(二)

    一 前言 IL系列 第一篇写完后 得到高人指点,及时更正了文章中的错误,也使得我写这篇文章时更加谨慎,自己在了解相关知识点时,也更为细致.个人觉得既然做为文章写出来,就一定要保证比较高的质量,和正确率 ...

随机推荐

  1. 关于mysql的范式——反范式的思路

    数据库的设计,是有模式的,就是在实际生产的项目中,按照怎样怎样步骤的去做.减少冗余呀,一对多呀等等. 那么回归到一个问题:数据库究竟是为了添加,还是为了查询?这个问题有些轴,以 增删改查四律而言,都是 ...

  2. php的echo 和 return的区别

    来源:https://blog.csdn.net/ljfphp/article/details/76718635 项目中碰到的问题,本来是想在控制器直接return $xml的($xml是一段xml格 ...

  3. 点击表头取下标&js时间转时间戳

    1.Date.parse(new Date("2017-7-31")); 2.$("th").eq(this.cellIndex);  // 3.end($ar ...

  4. Visual Studio 添加图标和版本

    在Visual Studio中,如果你创建的是纯C语言的工程,那么给可执行程序添加图标就没有便捷的入口. 但也只是入口不好找了,添加步骤还是比较简单的,以下为具体操作方法:     1. 右键点击C工 ...

  5. git取消跟踪(unversion)

    有时候我们会git add了一些不想跟踪的文件,通过下面的命令可以在没提交前从index里删掉跟踪记录(保留本地文件) git rm –cached 文件名

  6. apollo 项目配置中心开源框架部署

    apollo 于我带来的好处 1. 项目之前的配置信息全部都在 resources 目录下,当然这里我使用的是 Spring Boot 搭建的项目.使用 apollo 后,配置信息全部转移到 apol ...

  7. webpack打包多入口配置

    在它的entry入口设置多文件入口即可,例: entry: { core: './src/core.js', design: './src/design.js' }, 单一出口输出: output: ...

  8. ffmpeg+SDL2实现的音频播放器V2.0(无杂音)

    1. 前言 目前为止,学习了并记录了ffmpeg+SDL2显示视频以及事件(event)的内容. 这篇中记录ffmpeg+SDL2播放音频,没加入事件处理. 接下来加入事件处理并继续学习音视频同步,再 ...

  9. Xapian实战(二):core concepts

    参考资料 core concepts 正文 1. 并发性 xapian不包含任何全局变量,所以多线程编程中,在没有共享资源的情况下可以安全使用xapian.在实际操作中,由于每个线程都可以创建自己的x ...

  10. USACO Training Section 1.2 [USACO1.2]方块转换 Transformations

    题目描述 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 1:转90度:图案按顺时针 ...