docker镜像分层

docker分层

docker镜像的分层(使用的是kvm 链接克隆,写时复制的特性)

1:分层的好处:重复利用,节约资源

2:镜像越大,迁移时间越长;并且你如果使用docker做集群,那么如果镜像太大,

有变化,每个更新的话,都需要很长时间。所以最好是镜像分2-3层(基础系统-应用服务-代码),集群采预与下载。

 

查看分层镜像信息:(请注意missing - )

[root@server01 ~]# docker history nginx   (--no-trunc)
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
ae2feff98a0c   3 weeks ago   /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B        
<missing>      3 weeks ago   /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B        
<missing>      3 weeks ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
<missing>      3 weeks ago   /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B        
<missing>      3 weeks ago   /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7…   1.04kB    
<missing>      3 weeks ago   /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0…   1.96kB    
<missing>      3 weeks ago   /bin/sh -c #(nop) COPY file:e7e183879c35719c…   1.2kB     
<missing>      3 weeks ago   /bin/sh -c set -x     && addgroup --system -…   63.7MB    
<missing>      3 weeks ago   /bin/sh -c #(nop)  ENV PKG_RELEASE=1~buster     0B        
<missing>      3 weeks ago   /bin/sh -c #(nop)  ENV NJS_VERSION=0.5.0        0B        
<missing>      3 weeks ago   /bin/sh -c #(nop)  ENV NGINX_VERSION=1.19.6     0B        
<missing>      3 weeks ago   /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B        
<missing>      3 weeks ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B        
<missing>      3 weeks ago   /bin/sh -c #(nop) ADD file:3a7bff4e139bcacc5…   69.2MB   

如何实现

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

 

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

大概原理图:

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

注意:

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

 

 

 

 附上:

Docker 整体流程:

 

posted @ 2021-01-07 17:48  星火撩原  阅读(174)  评论(0编辑  收藏  举报