主要观点:容器很神奇,能让简单进程像虚拟机一样运行,其背后基于层(layers)的设计既简单又强大,本文解释了层的概念及工作方式等。
关键信息:
- 构建分层镜像:通过
Dockerfile
定义容器内容,每条命令创建一层,如FROM scratch
创建起始层,RUN
、COPY
等命令创建后续层,各层以压缩.tar.gz
文件形式存储,通过摘要确保名称唯一,还需 manifest 说明层的顺序以重现目录结构,有层缓存等优化。 - 快照:容器运行前需文件系统挂载,压缩层文件需解压并组织成文件系统即快照,创建快照过程与构建镜像相反,通过下载 manifest 和层文件创建活跃和提交快照,实际系统支持插件优化,如预组合和解压快照等。
- 叠加层:快照方式会产生大量文件变动和重复文件,Linux 原生支持叠加目录,通过
mount -t overlay
创建叠加文件系统,可方便地探索和修改文件系统,此方法也可用于实现快照系统,现代容器利用操作系统特性组合。
重要细节: - 每层以目录形式存储修改后的文件,如
/img/layer1
等。 - 压缩文件中若文件未修改则不包含,若文件被删除则用白文件占位,如
.wh.message.txt
。 - 构建镜像时可利用
COPY --link
优化,不依赖前一层时可并行创建压缩层文件。 - 快照系统中各目录和文件基于内容摘要命名,如
/var/path/to/snapshots/blobs/sha256/...
。 - 叠加层实验中通过
mkdir
创建相关目录,mount -t overlay
创建叠加文件系统并进行文件操作和查看。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。