Docker Image Layer

Docker镜像是一层一层组成的,每层代表镜像Dockerfile的一行命令。除了最后一层,其他的层都是只读的:

比如这个命令:

FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

这个Dockerfile文件构建产生的镜像分成四层:
第一层: 创建一个基于Ubuntu 18 的镜像。
第二层:在Docker镜像的当前目录添加一些文件
第三层:使用make命令构建出一些编译出来的新文件
第四层:使用run命令执行python源码文件

每层和上一层的区别仅仅是一条命令的区别,层层堆叠到一起。
Docker Image Layer_第1张图片
------------------------ Docker分层图示 ------------------------------

The RUN instruction will execute any commands in a new layer on top of the current image and commit the results. The resulting committed image will be used for the next step in the Dockerfile.
Layering RUN instructions and generating commits conforms to the core concepts of Docker where commits are cheap and containers can be created from any point in an image’s history, much like source control.

当你运行镜像的时候,会有一个称为container layer的可读写层,如上图所示。

这意味着,你运行此镜像的多个实例,也就是多个容器时,把所有变动都写到Container layer这一层,而不影响镜像里面的文件层。

Docker Image Layer_第2张图片

Container Layer的COW策略

即copy-on-write策略,当Container层需要从下层读取文件时直接读,而需要修改下层文件时,需要从下层复制到本层。这样设计主要时考虑到提高IO效率和减小镜像的存储容量。

docker ps -s可以查看镜像尺寸,size代表最上面一层的大小,virtual size等于镜像包大小+size的大小

Storage Driver

linux中将不同文件系统的文件组织到一起,由很多方案可以选AUFS,DeviceMapper等,而Storage Driver就是这些组件的驱动。

你可能感兴趣的:(虚拟化与自动化运维)