docker镜像分层结构

用过Dockerfile构建镜像的都知道Dockerfile执行完每一条指令都会创建一个新的镜像,最终的镜像由层层叠加而成。

分层的好处

最大的好处就是共享资源。
当多个镜像从相同的base镜像构建而来,那么Docker host只需要在磁盘保存一份base镜像,同时内存中也只需要加载一份base镜像,就可以为所有的容器服务了。

容器的修改并不会影响镜像

当容器启动时,一个新的可写层被加载到镜像的顶层,这一层通常被成为“容器层”。

对容器的改动,无论添加、删除、还是修改文件都只会发生在容器层中。

容器层是可写的,镜像层是只读的。

  • 添加文件时,新的文件添加到容器层。
  • 读取文件时,从上往下在各个镜像层查找,一旦找到就复制到容器层,然后读入内存。
  • 修改文件,从上往下查找,复制到容器层,然后修改之。
  • 删除文件,从上往下查找,找到后返回,记录删除操作。

只有当需要修改时才赋值一份数据,这种特性被称为Copy-On-Write。

容器层保存的是镜像层的变化,但不会对镜像本身进行任何修改。这也解释了镜像可以被多个容器共享

参考


dack
98 声望18 粉丝

一直在路上