docker是干什么的(Docker的前世今生介绍)
要聊Docker是什么,首先要聊聊虚拟化。虚拟化分为硬件级虚拟化和操作系统级虚拟化。很多同学用过的虚拟机,就是硬件级虚拟化。指的是运行在硬件之上的虚拟化技术。
都过年了,还不知道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是什么,首先要聊聊虚拟化。虚拟化分为硬件级虚拟化和操作系统级虚拟化。
很多同学用过的虚拟机,就是硬件级虚拟化。指的是运行在硬件之上的虚拟化技术,它的管理软件也就是我们通常说的Hypervisor或者Virtual Machine Monitor。
它需要模拟的就是一个完整的操作系统,也就是我们通常所说的基于Hyper-V的虚拟化技术,VMWare, Xen, VirtualBox,亚马逊AWS和阿里云都是用的这种技术。
而Docker则是操作系统级虚拟化中最流行的一种实现,也称为容器化技术。操作系统级虚拟化是运行在操作系统之上的,它模拟的是运行在操作系统上的多个不同进程,并将其封装在一个密闭的容器里面。
努努力试一下。
1、 在没有虚拟化的时候,如果我们想搭建一个服务器 ,我们列一下我们要做的事情:
购买一个硬件主机
安装操作系统
配置环境
部署应用
缺点是,当时一个主机只能部署一个应用。当我们需要迁移的时候,又要重复上面的步骤。在此基础上,虚拟化技术出现了。
2、虚拟化技术在本地操作系统的基础上 加了一层 Hypervisor层,Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可以虚拟化硬件资源,例如cpu、硬盘、内存资源等。
然后我们可以基于通过虚拟化出来的资源之上安装操作系统,这也就是所谓的虚拟机。
但一个技术必定有它的优缺点。
虚拟化的优点是。
资源池——一个物理机的资源分配到了不同的虚拟机里
很容易扩展——增加物理机或者虚拟机即可,因为虚拟机是可以复制的
很容易云化——亚马孙AWS,阿里云,谷歌云等
虚拟化的缺点是。
我们每创建一个虚拟机的时候,都会创建一个操作系统,一个操作系统最少占几G的资源。当虚拟机越多,资源浪费就会越多。
3、容器技术解决了这一痛点,但是这并不是他产生的主要原因。主要的原因是解决 开发和运维 人员环境不一致而导致的开发效率大大降低的问题。
容器可以帮我们把开发环境及应用整个打包带走,且打包好的容器可以在任何的环境下运行。
现在可以解释容器了,容器是“对软件和其依赖环境的标准化打包”。
容器可以实现。
应用之间相互隔离
共享一个OS Kernel(解决了资源浪费的问题)
可以运行在很多主流操作系统上
你开发软件的时候用的是Ubuntu,但是运维管理的都是Centos ,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转Centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,Centos不支持,在转移的过程当中运维就得想办法解决这样的问题。
这时候要是有Docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的Docker就可以了。而且部署速度非常快。