上面一节已经说了docker到底是什么,这一节我们来说说它解决了什么问题。
要弄明白整个问题,首先我们得先看看传统开发的过程
![](https://img.haomeiwen.com/i2653627/38de452b7c8c533d.png)
![](https://img.haomeiwen.com/i2653627/68355635eb251cc9.png)
而对于Docker,简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案拿现实世界中货物的运输作类比,为了解决各种型号规格尺寸的货物在各种运输工具上进行运输的问题,于是发明了集装箱。
![](https://img.haomeiwen.com/i2653627/ea94d3eddaac21c9.png)
从理论上说这一Dockercontainer概念并不新鲜,各种虚拟机Image也起着类似的作用。Docker container和普通的虚拟机Image相比,最大的区别是它并不包含操作系统内核。
关于docker解决的问题,个人看法
1、程序在我这跑得好好的,在你那怎么就不行呢?
这是一个典型的应用场景,Docker image中包含了程序需要的所有的运行时依赖,比如java的程序,肯定要在image中包含jdk;比如Python的程序,肯定要在image中包含对应版本的Python解释器。程序在我这跑得好好的,去你那就不行了,显然是环境问题。Docker把整个运行时环境打包放到image中,所以搞定了环境依赖问题
这点很重要么?真的很重要!如果你做过部署或发布系统将会对此感触颇深。
2.我们知道,一个程序要跑起来,需要这么几部分:代码 + 运行环境 + 配置 + 依赖的服务。代码当然就是同一份代码,不同的环境都一样,通常不会有问题,Docker image中包含了运行环境+配置,这对部署相当友好。如果你没有做过这种系统(其实大部分人都没有做过啦),但是你肯定装过软件,装一些复杂的软件的时候有没有因为版本依赖或者编译参数等让你抓狂?用了Docker再也没有这种问题了。
网友评论