简单讲docker和vm虚拟机相似,都是在同一硬件上虚拟化出多个服务器应用实例的功能,据Bottomley声称,借助通过全面调优的容器系统,你就能够在同一硬件上拥有数量比使用Xen虚拟机或KVM虚拟机多出四到六倍的服务器应用实例。谷歌和Docker等公司一直在致力于研发诸如OpenVZ和LXC(Linux容器)之类的开源项目,旨在让容器运行起来顺畅又安全。java
然而,Docker创建在LXC的基础上。与任何容器技术同样,就该程序而言,它有本身的文件系统、存储系统、处理器和内存等部件。git
容器与虚拟机之间的区别主要在于,虚拟机管理程序对整个设备进行抽象处理,而容器只是对操做系统内核进行抽象处理。docker
这反过来意味着:虚拟机管理程序能作容器作不了的一件事就是,使用不一样的操做系统或内核。因此,举例说,你可使用微软Azure,同时运行Windows Server2012的实例和SUSE Linux企业级服务器的实例。至于Docker,全部容器都必须使用一样的操做系统和内核。安全
另外一方面,若是你只是想让尽量多的服务器应用实例在尽量少的硬件上运行,可能不大关心运行多个操做系统虚拟机。要是同一应用程序的多个副本正是你须要的,那么你会喜欢上容器。服务器
改用Docker这一举措有望每一年为数据中心或云计算服务提供商节省数千万美圆的电力和硬件成本。因此难怪它们在一窝蜂地尽快采用Docker。运维
Docker带来了以前技术所没有的几个新特色。第一是,与以前的方法相比,Docker让容器部署和使用起来更容易、更安全。此外,因为Docker与其余容器领域的巨擘进行了合做,包括Canonical、谷歌、红帽和Parallels,共同开发其关键的开源组件libcontainer,它为容器带来了迫切须要的标准化。gitlab
与此同时,广大开发人员可使用Docker封装、交付和运行任何应用程序,应用程序成为轻型的、可移植的、自给自足的LXC容器,能够在任何地方运行。正如Bottomley告诉我,“容器让你当即享有应用程序可移植性。”性能
最后但并不是最不重要的,Docker容器易于部署到云端。正如Ben Lloyd Pearson在opensource.com上写道:“Docker采用了一种特别的方式,以即可以整合到大多数DevOps(开发运营)应用程序当中,包括Puppet、Chef、Vagrant和Ansible,或者能够独自使用,以管理开发环境。主要卖点是,它简化了一般由另外这些应用程序执行的好多任务。具体来讲,有了Docker,人们就能够搭建与活动服务器如出一辙的本地开发环境,从同一个主机运行多个开发环境(每一个开发环境有独特的软件、操做系统和配置),在新的或不一样的服务器上测试项目,以及让任何人均可以在设置如出一辙的状况下处理同一项目,不管本地主机环境怎样。”测试
简而言之,Docker能为你作的事情就是:相比其余技术,它能让更多数量的应用程序在同一硬件上运行;它让开发人员易于快速构建可随时运行的容器化应用程序;它大大简化了管理和部署应用程序的任务。云计算
Docker解决了什么问题
一、程序在我这跑得好好的,在你那怎么就不行呢?
这是一个典型的应用场景,Docker image中包含了程序须要的全部的运行时依赖,好比java的程序,确定要在image中包含jdk;好比Python的程序,确定要在image中包含对应版本的Python解释器。程序在我这跑得好好的,去你那就不行了,显然是环境问题。Docker把整个运行时环境打包放到image中,因此搞定了环境依赖问题!
这点很重要么?真的很重要!若是你作过部署或发布系统将会对此感触颇深。
咱们知道,一个程序要跑起来,须要这么几部分:代码 + 运行环境 + 配置 + 依赖的服务。代码固然就是同一份代码,不一样的环境都同样,一般不会有问题,Docker image中包含了运行环境+配置,这对部署至关友好。
因此总结起来就是:Docker解决了运行环境和配置问题,方便发布,也就方便作持续集成。
二、系统好卡,确定是又有哪一个哥们的程序在做孽了
如今的服务器都牛的很,动不动128G内存,24个CPU,Linux自己就是个多租户的操做系统,能够多人共用,可是若是某个程序狂吃内存和CPU,占用了太多系统资源,这就会影响其余程序的运行。
一个公司的几个同事共用一台机器出现这种问题能够经过内部协调沟通解决。可是云主机提供商呢?不一样的用户之间不认识,共用一台强大的计算机,结果某个程序耗尽了资源,用户确定不乐意了。
因此虚拟机出现了,良好了作了资源隔离,不一样用户之间彼此老死不相往来,不会相互影响,世界一会儿清静了。可是,虚拟机有缺点:建立速度慢,迁移起来麻烦,由于中间加了一层guest os,有了性能损耗,一个牛逼的机器也就建立十几个虚拟机,太浪费了……
相对虚拟机的重量级虚拟化方案,Linux内核级的一些隔离方案让人们看到了但愿,cgroups、namespace、tc、quota、chroot、lxc,终于,Docker出现了,Docker利用这些成熟的技术,让虚拟化变得轻量了起来,建立一个container瞬间完成,秒级!cpu指令集再也不被翻译执行,性能损耗很是少,虽然说隔离性没有虚拟机那么完全,安全性上稍差一些,但也基本能够用,不用太担忧:)
因此总结起来就是:更轻量的虚拟化,节省了虚拟机的性能损耗
上面两点是Docker解决的问题,那它有哪些应用场景呢?
其实从上面的描述中也基本能够窥其一二了
一、程序分发,gitlab的安装很恶心吧,因此有人作了gitlab的image
二、部署发布,这点对运维的同窗颇有帮助
三、PaaS,tsuru、flynn都是基于Docker的,CloudFoundry也要从warden迁移到Docker,不解释