devicemapper

docker镜像,容器和存储驱动

孤街浪徒 提交于 2019-12-04 12:32:57
镜像和层 镜像是由一些只读并且描绘文件系统区别的层组成的.它们一层一层堆叠起来,组成了镜像的基础文件系统.这些层都是只读的. 下图是由4层构成的ubuntu镜像: 而docker存储驱动的职责就是将这些层堆叠起来.并提供一个统一的视图.让我们觉得跟普通文件系统没什么区别. 当你创建了一个容器时.会在镜像的层上再添加一层叫做"容器层(container layer)",所有在运行中的容器中所做的修改操作,都是影响的这一层. 看下图 内容可寻址的存储 docker 1.10 开始,介绍了一种全新的寻址镜像和层上数据的存储模型.之前的镜像和层上数据的存放,都是通过随机UUID存放.新模型采用一种安全的内容hash来存放. 新模型特点包括提高了安全性.防止了id冲突,保证了pull,push,load,save操作后的数据一致性.并且更好的提供了层之间的共享问题. 参考图片: 容器层还是random uuid 对于新的模型,原先旧模型的镜像数据需要重新计算id来迁移.这些操作会在你运行新版本docker进程后自动执行. 镜像较多的话会比较耗资源.如需手工迁移请参考官方文档. 容器和层 容器和镜像主要区别就在于容器多了最上层的容器层.所有在容器中的修改操作,都是影响的容器各自的容器层.底下镜像的层都是只读不变的. 下图展示了多个容器共享同一个镜像,但是拥有各自的容器层.互相不受影响.