Docker能解决什么问题呢?
一个工具的出现必然须要解决一些问题,Docker也不例外,简单说说咱们常见的2种状况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指令集再也不被翻译执行,性能损耗很是少,虽然说隔离性没有虚拟机那么完全,安全性上稍差一些,但也基本能够用,不用太担忧~
因此总结起来就是:更轻量的虚拟化,节省了虚拟机的性能损耗。java