首页 > 代码库 > Docker是什么

Docker是什么

Docker是做什么的

      按照官方的说法, Docker是一个开源的应用容器引擎。这个说法太笼统,听了也是一头雾水。先说C#, 在读书的时候学的C/C++对平台的依赖很大,每次发布,在不同的平台下都要Build一次,否则就有可能跑不起来,C#就利用CLR做到了平台无关性; 同样,软件的部署也需要平台, Ubuntu的软件包在Centos下可能运行不起来。为了像CLR一样解决问题,Docker使用容器引擎解决平台依赖问题,它在每个宿主机上都启动一个Docker的守护进程(Docker Engine),守护进程屏蔽了与平台相关的信息,对上层应用提供统一的接口。这样,Docker化的应用,就能在不同的平台下面运行,Docker会针对不同平台,解析给不同平台下的执行驱动、存储启动和网络驱动去执行。这就是Docker提出的”Build once, Run anywhere, Configure once, Run anything”.

粗浅原理:

     从软件的角度看,Docker是C/S的架构,分为:Docker Server 和Docker Client。从Docker的生态角度看,Docker由Docker仓库和Docker自身程序组成:拿iPhone做对比的话,Docker仓库相当于APPStore,Docker相当于iPhone的iOS手机操作系统。

把软件运行起来是用户最终的需求,至于怎么安装、配置,用户不太关心,那么Docker就把软件和它的依赖环境(包括造作系统和共享库等)、依赖的配置文件打包到一起,以虚拟机的形式放到官方仓库,供大家使用。这样,只要虚拟机运行起来,就可以不做任何修改的把软件轻松的运行起来。(有没有想到以前的雨林木风包含Office的安装包?一个道理),就像下图:

   技术分享

 

      但是这种软件部署方式存在很多问题:一般一个软件包大小可能也就几M到几十M,但是一个操作系统却有好几个G。如果每个软件都带上它的依赖操作系统,那么每个软件都有几个G,别说运行,光下载都要数小时,是不是瞬间心塞?

       但是神奇的分层概念来了:把一个应用分为任意多个层,我们共享相同的层就可以了,所以就可以这样了:

 技术分享

 

  当然实际Docker的分层不会这么简单,还引入了分更多的层,去节省更多的空间和现实版本控制等越发复杂的问题。

  本文对Docker的理解是我在读《循序渐进学Docker》的读书笔记,分享出来有助于自己的更好的理解,也强化记忆。

Docker是什么