• 1
  • 2
  • 3
  • 4
  • 5
阿里云应用开发 首 页  »  帮助中心  »  云服务器  »  阿里云应用开发
Docker解决了什么问题?
发布日期:2016-8-2 17:8:46

  这段时间Docker实在是如日中天,因为到处都是它的信息,但是你认为它解决了什么问题?有哪些应用场景?

  这个问题显然没有标准答案,像你去面试阿里云这些大公司时,面试官问你这些问题面试官只是想看看你是否对新技术保持敏感,是否有自己的想法,若你的观点跟面试官不谋而合,绝对加分啊:)

  下面都是笔者个人看法,轻拍~

  1、系统好卡,肯定是又有哪个哥们的程序在作孽了

  现在的服务器都牛的很,动不动128G内存,24个CPU,Linux本身就是个多租户的操作系统,可多人共用,但如果某个程序狂吃内存和CPU,占用了太多系统资源,这就会影响其他程序的运行。

  一个公司的几个同事共用一台机器出现这种问题可通过内部协调沟通解决。但云主机提供商呢?不同的用户间不认识,共用一台强大的计算机,结果某个程序耗尽了资源,用户肯定不乐意了。

  因此虚拟机出现了,良好了做了资源隔离,不同用户间彼此老死不相往来,不会相互影响,世界一下子清静了。但虚拟机有缺点:创建速度慢,迁移起来麻烦,由于中间加了一层guest os,有了性能损耗,一个牛逼的机器也就创建十几个虚拟机,太浪费了……

  相对虚拟机的重量级虚拟化方案,Linux内核级的一些隔离方案让人们看到了希望,cgroups、tc、quota、chroot、namespace、lxc,终于,Docker出现了,Docker利用这些成熟的技术,让虚拟化变得轻量了起来,创建一个container瞬间完成,秒级!cpu指令集不再被翻译执行,性能损耗非常少,尽管说隔离性没有虚拟机那么彻底,安全性上稍差一些,但是也基本可以用,不用太担心:)

  因此总结起来就是:更轻量的虚拟化,节省了虚拟机的性能损耗

  2、程序在我这跑得好好的,在你那怎么就不行呢?!

  这是一个典型的应用场景,Docker image中包含程序需要的所有的运行时依赖,比如java的程序,肯定要在image中包含jdk;比如Python的程序,肯定要在image中包含对应版本的Python解释器。程序在我这跑得好好的,怎么去你那就不行了,显然是环境问题。Docker把整个运行时环境打包放到image中,因此搞定了环境依赖问题!

  这点很重要么?真的很重要!若你做过部署或发布系统将会对此感触颇深。

  我们知道,一个程序要跑起来,需要这么几部分:代码 + 运行环境 + 配置 + 依赖的服务。代码当然就是同一份代码,不同的环境都一样,通常不会有问题,Docker image中包含运行环境+配置,这对部署相当友好。若你没有做过这种系统(实际上大部分人都没有做过啦),但你肯定装过软件,装一些复杂的软件的时候有没有由于版本依赖或者编译参数等让你抓狂?用了Docker再也没有这种问题了:

  docker pull xxx; docker run xxx; done:)

  因此总结起来就是:Docker解决了运行环境和配置问题,方便发布,也就方便做持续集成。

  上面两点是Docker解决的问题,那它有哪些应用场景呢?

  其实从上面的描述中也基本可以窥其一二了

  (1)PaaS,tsuru、flynn都是基于Docker的,CloudFoundry也要从warden迁移到Docker,不解释

  (2)程序分发,gitlab的安装很恶心吧,所以有人做了gitlab的image

  (3)部署发布,这点对运维的同学很有帮助

  偶尔跟面试官侃点高大上的话题,惊死他!