本文记录本人自己学习过程中思考和总结的内容,很有可能有理解偏差,望各位指出,这里仅供交流学习使用。
docker有三大概念:分层、仓库、镜像
;这三个概念贯穿始终docker始终。
为什么说是三大概念呢,我个人的理解是,基于这三个概念,支撑起了docker的整个系统的设计,也赋予了其相应的特点。
总的来讲,我认为:
镜像提供了快速生成可运行容器的可能,仓库用于存储镜像,让镜像有了一个统一的聚集地,方便我们去管理和使用大量杂乱的镜像,而分层的思想让镜像变得更加强大;具体解释如下:
镜像:
镜像是什么?最早的概念是和光盘有光,是指对某些内容的数据拷贝,就像映射一样。不过在docker里面,对于它的理解是,一些文件内容的集合,具有可复制性以及不可修改的性质
。
集合: 镜像可以由很多的文件构成,这些文件可能是单纯的一两个文件也或者是某一个SDK包;
可复制性: 镜像的可复制性,在docker里面的体现是指可以基于它无限制(无限是相对的,硬件是其唯一的限制)的创建容器,而且其所创建的容器在一开始启动的时候都是完全一样的(当然,这里是指用相同的命令执行,如果挂载不同的内容,容器里面的数据肯定不一样)。
不可修改: 镜像一旦创建,它就不能再被修改了,而一旦对其做出修改,其实也是相当于基于它添加了某些内容从而形成了一个新的镜像。
仓库
仓库,这里可以类比于GitHub的仓库,同样的这里也有官方的Docker Hub;然后我们也可以搭建自己的仓库。至于仓库的好处,就是有了一个放置镜像的地方(这个地方就是镜像仓库),可以随意的放置我们想要放置的东西,自然这样也就方便管理了.
分层:
对于同一个软件,它的内容被拆分成为了一个不同的部分,每个部分成为一个层,而每一个层中可能包含了许多的内容(小到一个文件,大到一个软件)。
对于docker的分层思想,目前感知到的好处就是复用、共享、高效
。
复用: 我们拉取镜像是一层一层拉取到本地的,当我们需要拉取的镜像某些层在我们本地已经存在的话,那就可以不用拉取那部分,这就提升了拉取速度;
共享: 当我们某些部分是很多应用运行所共同需要的,那么它可以单独为一个层,为其它应用共同使用,减少了本地的存储资源的占用。
高效: 公共层的运行资源可以供给所有的其它的层共同使用,不用对公共都需要的资源进行重复创建与运行,降低宿主机(host)的资源占用,提高资源利用效率,速度也就快了,更高效了(这一点主要体现在操作系统方面,操作系统那一部分可以说是大伙都需要使用的,所以各个镜像运行起来编程容器的时候,直接与操作系统交互,效率更好;当然不同容器运行的时候需要的环境可能有差别,这部分由容器自己负责管理,而共有的系统内核大伙都一样,则共用)。