docker分层
docker镜像的分层(使用的是kvm 链接克隆,写时复制的特性)
1:分层的好处:重复利用,节约资源
2:镜像越大,迁移时间越长;并且你如果使用docker做集群,那么如果镜像太大,
有变化,每个更新的话,都需要很长时间。所以最好是镜像分2-3层(基础系统-应用服务-代码),集群采预与下载。
查看分层镜像信息:(请注意missing - )
[root@k8s129 ~]# docker history centos_ssh:v1.2 (--no-trunc)
IMAGE CREATED CREATED BY SIZE COMMENT
275e0f02e6b1 13 days ago /usr/sbin/sshd -D 32B
185aecfa154d 13 days ago /bin/bash 45.2MB
0f3e07c0138f 4 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
如何实现
至于容器如何获取镜像层文件而又不影响到是镜像层的呢?docker是这样实现的?
如果需要获取某个文件,那么容器曾会从上到下去下一层的镜像层去获取文件,如果该层文件不存在,那么就会去下一镜像层去寻找,直到最后一层。
对于用户而言,用户面向的是一个叠加后的文件系统。
而任何对于文件的操作都会记录在容器层,例如说修改文件,容器层会把在镜像层找到的文件拷贝到容器层然后进行修改,删除文件则会在容器层内记录删除文件的记录。
大概原理图:
前面我们基于centos镜像,一层一层做了几个镜像
注意:
实际制作镜像的时候,我们应该经量把会发生变化的层放在最后,这样前面的层就可以走缓冲。(比如下图:先制作httpd 和sshd , 先制作sshd和httpd的区别)
附上:
Docker 整体流程: