011、镜像的分层结构(2018-12-28 周五)

 
Docker支持通过扩展现有镜像,创建新的镜像
 
实际上Docker Hub上99%的镜像都是在base镜像的基础上,安装和配置软件后构建出来的。
 
FROM debian                    #    镜像不在是从scratch开始,而是从debian base开始
RUN apt-get install emacs      #    安装emacs
RUN apt-get install apache2    #    安装apache2
CMD ["/bin/bash"]              #    容器启动时运行bash
 
构建过程如下图:
 
    
 
 
新镜像是从base镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层
 
Docker为什么要分这么多层 -- 共享资源
 
比如好多镜像都是从相同base的基础上构建出来来,那么 Docker Host上只需要保存一份base即可,同时内存中也只需加载一份base镜像,镜像的每一层都可以被分享,
 
Copy-on-Write
 
多个容器共享一个基础镜像,那么当某个容器修改了配置文件,其他容器会受影响吗? 不会
 
容器在启动时,会创建一个新的可写层,加载到镜像的顶部。这一层通常被称作容器层,容器层下面的是镜像层
 
对容器的所有改动,都只发生在容器层,下面的镜像层是只读的。
 
 
所有镜像层叠加起来组成一个统一的文件系统。如果不同层中有一个相同的文件,,比如 /a  ,上层的 /a  会覆盖下层的 /a ,用户只能看到最靠近顶端镜像层中的/a 
 
1、添加文件 -- 新文件会被添加到容器层中
2、读取文件 -- 在镜像层中从上往下找,找到后不再继续向下查找
3、修改文件 -- 在镜像层中从上往下找,找到后复制到容器层进行修改
4、删除文件 --  在镜像层中从上往下找,找到后在容器层将该文件标记为删除
 
只有当需要修改时才从镜像层复制一份到容器层,这个特性叫做 Copy-on-Write 。容器层保存的是镜像变化的部分,并不会对镜像本身进行修改
 
 
posted @ 2018-12-29 00:51  三角形  阅读(187)  评论(0编辑  收藏  举报