06: docker镜像分层

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                  

<missing>           4 weeks ago         /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  

<missing>           4 weeks ago         /bin/sh -c #(nop) ADD file:d6fdacc1972df524a…   220MB    

如何实现

至于容器如何获取镜像层文件而又不影响到是镜像层的呢?docker是这样实现的?
如果需要获取某个文件,那么容器曾会从上到下去下一层的镜像层去获取文件,如果该层文件不存在,那么就会去下一镜像层去寻找,直到最后一层。
对于用户而言,用户面向的是一个叠加后的文件系统。

 

而任何对于文件的操作都会记录在容器层,例如说修改文件,容器层会把在镜像层找到的文件拷贝到容器层然后进行修改,删除文件则会在容器层内记录删除文件的记录。

大概原理图:

前面我们基于centos镜像,一层一层做了几个镜像

注意:

实际制作镜像的时候,我们应该经量把会发生变化的层放在最后,这样前面的层就可以走缓冲。(比如下图:先制作httpd sshd , 先制作sshdhttpd的区别)

 

 附上:

Docker 整体流程:

原文地址:https://www.cnblogs.com/jim-xu/p/11785882.html