基于高度虚拟化所诞生的容器技术,如今已经走向大规模应用。那么容器、虚拟机、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. 关于unix环境高级编程、Linux程序设计两部书浅谈

    unix环境高级编程的术语很多,概念内容,也很多,不过学习概念性质.标准规则类的东西,想必都是这样吧——需要进行拓展的内容很多. Linux程序设计,图文并茂,代码量够足,看起来,感觉难度还可以. l ...

  2. C# 基础知识系列-13 常见类库(三)

    0. 前言 在<C# 基础知识系列- 13 常见类库(二)>中,我们介绍了一下DateTime和TimeSpan这两个结构体的内容,也就是C#中日期时间的简单操作.本篇将介绍Guid和Nu ...

  3. 详解数组分段和最大值最小问题(最小m段和问题)

    数组分段和最大值最小问题(最小m段和问题) 问题描述 给定n个整数组成的序列,现在要求将序列分割为m段,每段子序列中的数在原序列中连续排列.如何分割才能使这m段子序列的和的最大值达到最小? 清洁工:假 ...

  4. Samba远程Shell命令注入执行漏洞

    CVE:CVE-2007-2447 原理: Samba中负责在SAM数据库更新用户口令的代码未经过滤便将用户输入传输给了/bin/sh.如果在调用smb.conf中定义的外部脚本时,通过对/bin/s ...

  5. AndroidStudio提高编译速度的建议

    1.使用最新的Android gradle插件 Google tools team一直致力于提高android studio的编译速度,使用最新的gradle插件可以搞编译速度 在Android Gr ...

  6. 痞子衡嵌入式:揭秘i.MXRT1170 eFuse空间访问可靠性的保护策略(冗余与ECC)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MXRT1170的eFuse空间访问可靠性保护策略. 关于i.MXRT系列的eFuse/OTP,痞子衡之前在介绍Boot时写过 ...

  7. 计算5的n次幂html代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Json & pickle 数据序列化

    前提: 文本文件中只能写入字符串或ascii码格式的内容. info={'name':'zoe','age':18} f=open('test.txt','w') f.write(info) #在文本 ...

  9. wampserver安装之后无法打开localhost

    2019独角兽企业重金招聘Python工程师标准>>> 如上图 是服务未成功启动 服务成功启动标志 修改服务器监听端口 在安装完wampserver,打开,如果在状态栏上的图标不是绿 ...

  10. GitHub 被指审查内容,著名“换脸”开源项目 deepfake 遭限制访问

    开发四年只会写业务代码,分布式高并发都不会还做程序员? >>>   昨天 Hacker News 上一条关于 deepfake 开源项目的帖子(https://news.ycombi ...