Docker,容器,虚拟机和红烧肉

Docker火了,有多火你本身看看下面的统计数据就知道了git

在发布4个月的时间里,下载量就超过50000次,github上收到超过4000个star,涌现了超过100个贡献者,而且有超过150个项目和超过1000个产品开始使用docker。程序员

最有意思的事情是,在docker自己尚未稳定以前,就有如RedHat和AWS这样的公司为其提供官方支持,不少开发者和公司就急不可耐的把它用到生产环境,连docker本身的CEO都要跳出来劝说你们稍安勿躁,咱们尚未准备好嘞。在整个IT软件发展历史中,好像不多有这种状况,特别是这种企业级运维相关的系统,通常你们都是慎之又慎,为什么此次如此不谨慎,如此不认真,如此不负责任把还在beta阶段的系统上线运行?github

我记得2014年8月,这时距离docker发布仅仅1年的时间,我与湖南某家大型媒体的研发中心交流,开发人员已经在使用docker运行他们的系统,并且有些已经进入生产环境。而在过去的2年里,每个我所接触的客户,从C-level的管理人员,到中层管理者,到开发人员都在提这个东西。docker

它究竟是什么?这多是每个IT从业者都想搞明白的问题。微信

Docker是什么?容器又是什么?

Docker 直译:码头工人。是在码头上搬运货物的工人
容器 英文:Container,若是再翻译回来就有2个不一样的释义:集装箱/容器。
运维

若是按照这世界上大多数正常人的理解,你们会把 Docker(码头工人)和 Container (集装箱)这一对事物放在一块儿,他们的关系一目了然:码头工人搬运集装箱。可是若是按照这世界上另外的一类人(程序员)的理解,咱们会这样组合 ,Docker (代码集装箱搬运工)和 Container (容器)。工具

Docker与容器是彻底2个不一样的东西,Docker是用来组装/搬运/拆包容器的工具。固然也能够是人,咱们原来这些苦逼的程序员谁没干过zip/copy/paste/unzip的工做呢?其实Docker就是这样一个工具,用来打包 (build)/传送(push/pull)/拆包 (run) 那些须要运行的应用。而容器就是那个包。优化

docker-concept

那么容器又是什么?

其实和集装箱很相似,就是把那些须要放在一块儿从A地运送到B地运行的,不能和其余程序混杂的代码封装成的一个包而已。这个概念从计算机出现的那天基本上就存在了,只是这么多年咱们一直在不停的改进,但历来没有一个像docker这样的工具让容器的使用变的如此简单。在Unix/Linux的世界里,它曾将叫作 Process Container,如今被称为Control Group (cGroup);在Windows世界里,咱们曾经有组件。他们的目的都同样,为了把程序从A地运送到B地,同时确保他们能够相互隔离的运行。ui

Docker绝对不等同于容器。一个是干活的人,一个是被搬运的物品,能同样吗?可是我仍然在各类技术文章,会议演讲上看到和听到将他们混为一谈的说法。实在以为须要给他们正名,也是今天写这个文章的主要缘由。spa

Docker,容器与虚拟机有啥区别?

在每一篇介绍Docker的文章里面都会看到与虚拟机比较的内容,其实我以为这彻底是拿苹果和香蕉比较,它们彻底不具有可比性,至少在技术上!
你们为啥要这样比较,主要目的是让那些不了解IT可是却在管理IT的人(对,就是你的领导和你的客户)理解为啥他们好不容易,花了n多钱创建起了虚拟化平台/私有云,如今还要再花钱搞容器,搞docker。对的,这纯粹是个市场行为,与技术无关,由于他们在技术上不具有可比性。
惯常的说法,容器启动迅速(对,它只须要加载那些当前应用的进程)虚拟机启动缓慢(废话,它要加载一堆和应用无关的进程好吗)。你试试把100个应用打包到一个容器里面而后启动它,估计你必定会被98%的Windows用户战胜。
给你一个hyper-v, vmware, kvm你跑不了容器,你仍是须要在上面启动虚拟机,而后才能运行容器。就好像你要在家里提供100个品类的菜单,而后让你儿子天天回来点餐,给他个沙漏,而后说你随便点,我保证在10分钟内上菜。你当你是谢霆锋呢?人家谢大厨后面有10个帮厨,10个采购,10个餐厅经理,10个服务员,作的菜都是提早腌制的。你就算有三头六臂也只能说:臣妾作不到啊!
因此,容器之因此快,是把每次都要启动操做系统的操做预先完成了,这样只须要启动应用自己而已。并且,容器不会比直接启动一个应用快,甚至还会更慢一点。

然并卵,那我要这七十二变有何用?

牢骚发够了,仍是说说Docker到底有啥用?Docker这个搬运工与其余搬运工不一样的是,他在组装容器的时候会把应用须要的其余配件都放在一个集装箱里。这样,集装箱到货之后,直接开包就能够完成应用组装;不用再到其余地方七拼八凑的去找各类配件了。这就比如你想作红烧肉,原来的应用打包只给你打包了肉(应用),别的什么八角,香叶,冰糖,生抽老抽(应用依赖环境)都不带;如今商家提供一站式服务,一个包里不光有肉,还有七七八八全部的东西。你家里有炉子,有锅就够了(操做系统)。
另外,Docker厉害的地方在于,它不光提供了这些配料,还把物流给你搞定了。咱们如今能够直接向商家(Docker Hub)下单,商家送货上门(Docker Pull),你准备好炉子和锅(操做系统),直接下锅(Docker Run),菜就上桌喽。

最后,用一句话定义Docker,那就是:优化应用运维过程的工具和生态系统。

晚上吃红烧肉!祝你们胃口好!

hongshaorou


相关资料:


请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息

qrcode_for_gh_b7c158df1fd1_430

相关文章
相关标签/搜索