1、本质
- “容器镜像”:挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统
- 也叫作:rootfs(根文件系统)
- 一般由一个完整操作系统的文件系统组成,比如 Ubuntu16.04 的 ISO
- rootfs 只是一个操作系统所包含的文件、配置和目录,并不包括操作系统内核
- rootfs的存在保证了容器应用的云端与本地服务器环境的高度一致性
2、Docker镜像的特点
- 引入layer的概念,以增量式的方式来制作rootfs(即镜像)
- 利用联合挂载UnionFS的方式来实现(常用AuFS 联合文件系统 )
3、镜像结构
(1) 只读层
- 挂载方式 ro+wh:readonly+whiteout
- 这些只读层,都以增量的方式分别包含了 Ubuntu 操作系统的一部分
(2) init层
- 以“-init”结尾的层,夹在只读层和读写层之间
- Init 层是 Docker 项目单独生成的一个内部层,专门用来存放 /etc/hosts、/etc/resolv.conf 等信息
(3) 可读可写层
- 挂载方式 rw:read write
- 在容器中的写操作,会以增量的方式叠加在可读写层
4、镜像文件的增删改查
此种联合文件系统的特性(以AUFS 为例)如下:
- AUFS 是一种联合文件系统,它把若干目录按照顺序和权限 mount 为一个目录并呈现出来
- 默认情况下,只有第一层(第一个目录)是可写的,其余层是只读的。
- 增加文件:默认情况下,新增的文件都会被放在最上面的可写层中。
- 删除文件:因为底下各层都是只读的,当需要删除这些层中的文件时,AUFS 使用 whiteout 机制,它的实现是通过在上层的可写的目录下建立对应的whiteout隐藏文件来实现的。
- 修改文件:AUFS 利用其 CoW (copy-on-write)特性来修改只读层中的文件:AUFS 工作在文件层面,对只读层中的文件做修改,在第一次修改时,文件都会被拷贝到可写层然后再被修改。