Docker 镜像:从基础到高级应用
1. 联合文件系统与写时复制机制
联合文件系统(UFS)大多采用写时复制(Copy - on - Write)机制,也可以理解为变更时复制。当只读层(非顶层)中的文件被修改,整个文件会先从只读层复制到可写层,再进行修改。这会对运行时性能和镜像大小产生负面影响。
例如,在一个包含三层的镜像中,文件会经历添加、更改、删除和再次添加等操作。了解文件系统更改的记录方式,有助于我们理解使用docker container commit命令创建新镜像时会发生什么。
2. 镜像、层、仓库和标签的概念
- 层与镜像的关系:联合文件系统由一系列层组成,新层会添加到栈顶。每层存储该层所做的更改集合以及元数据。当提交容器对文件系统的更改时,会以可识别的方式保存顶层的副本,并生成新的 ID,同时保存所有文件更改的副本。层的元数据包括生成的标识符、下层(父层)标识符以及创建该层的容器的执行上下文。镜像就是从给定顶层开始,通过每层元数据中的父 ID 链接起来的层栈。
- 示例:使用
docker container commit mod_ubuntu命令提交容器更改,会生成一个新的镜像 ID,如6528255cda2f9774a11a6b82be46c86a66b5feff913f5bb3e09536a54b08234d。
- 示例:使用
graph LR