都过年了,还不知道Docker是怎么回事?5分钟告诉你它的前世今生
大概9年前,2010年,上图的年轻人Solomon Hykes,在旧金山成立了主攻PaaS的公司,起名dotCloud。
PS : PaaS可理解为,为软件开发提供相关的配套设施,PaaS通常提供构建服务SDK,并实现云端自动部署与测试,包括语言环境,运行环境,存储等基础服务,其中涉及多种框架、语言(如PHP, MySQL, Node.js, MongoDB等)。
当dotCloud把基于LXC(Linux Container),即用Go开发的的PaaS平台做到极致的时候,理论上dotCloud已经摆脱环境限制。
在当时PaaS激烈竞争环境下,善于洞察的Solomon发现其基于LXC的技术具有快速,高效协作开发与部署的捷径,为了生存,不得已决定开源核心引擎(Apache2.0协议), 非常意外,该技术受到 PaaS大佬(Amazon, Google, IBM, MS, RedHat, VMware)的追捧及认可。
Solomon顺势而为,直接于2013年将公司更名为Docker,并发布Docker 0.1版本,并于2014年把docCloud的PaaS服务平台出售,至此拉开了基于云计算平台的发布产品变革序幕。
那Docker到底是什么?为何这么受追捧?
要聊Docker是什么,首先要聊聊虚拟化。虚拟化分为硬件级虚拟化和操作系统级虚拟化。
很多同学用过的虚拟机,就是硬件级虚拟化。指的是运行在硬件之上的虚拟化技术,它的管理软件也就是我们通常说的Hypervisor或者Virtual Machine Monitor,它需要模拟的就是一个完整的操作系统,也就是我们通常所说的基于Hyper-V的虚拟化技术,VMWare, Xen, VirtualBox,亚马逊AWS和阿里云都是用的这种技术。
而Docker则是操作系统级虚拟化中最流行的一种实现,也称为容器化技术。操作系统级虚拟化是运行在操作系统之上的,它模拟的是运行在操作系统上的多个不同进程,并将其封装在一个密闭的容器里面。
这么说还是没懂,能不能简单解释解释?
努努力试一下。
1、 在没有虚拟化的时候,如果我们想搭建一个服务器 ,我们列一下我们要做的事情:
- 购买一个硬件主机
- 安装操作系统
- 配置环境
- 部署应用
缺点是,当时一个主机只能部署一个应用。当我们需要迁移的时候,又要重复上面的步骤。在此基础上,虚拟化技术出现了。
2、虚拟化技术在本地操作系统的基础上 加了一层 Hypervisor层,Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可以虚拟化硬件资源,例如cpu、硬盘、内存资源等。
然后我们可以基于通过虚拟化出来的资源之上安装操作系统,这也就是所谓的虚拟机。
但一个技术必定有它的优缺点。
虚拟化的优点是:
- 资源池——一个物理机的资源分配到了不同的虚拟机里
- 很容易扩展——增加物理机或者虚拟机即可,因为虚拟机是可以复制的
- 很容易云化——亚马孙AWS,阿里云,谷歌云等
虚拟化的缺点是:
我们每创建一个虚拟机的时候,都会创建一个操作系统,一个操作系统最少占几G的资源。当虚拟机越多,资源浪费就会越多。
虚拟化 VS 容器
3、容器技术解决了这一痛点,但是这并不是他产生的主要原因。主要的原因是解决 开发和运维 人员环境不一致而导致的开发效率大大降低的问题。
容器可以帮我们把开发环境及应用整个打包带走,且打包好的容器可以在任何的环境下运行。
现在可以解释容器了,容器是“对软件和其依赖环境的标准化打包”。
容器可以实现:
- 应用之间相互隔离
- 共享一个OS Kernel(解决了资源浪费的问题)
- 可以运行在很多主流操作系统上
最后,再来看看最典型的docker应用场景吧
你开发软件的时候用的是Ubuntu,但是运维管理的都是Centos ,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转Centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,Centos不支持,在转移的过程当中运维就得想办法解决这样的问题。
这时候要是有Docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的Docker就可以了。而且部署速度非常快。
前世今生就介绍到这里了,要如何入门Docker,可以参见小编的另一篇文章
10 分钟入门 Docker,带你赢在起跑线上!
篇幅原因,关于Docker的核心技术将会在下期介绍,敬请期待哦~
本文参考的CSDN博客文章:
- 《Docker》
- 《docker 容器的起源》