理解容器镜像层

主要观点:容器很神奇,能让简单进程像虚拟机一样运行,其背后基于层(layers)的设计既简单又强大,本文解释了层的概念及工作方式等。
关键信息:

  • 构建分层镜像:通过Dockerfile定义容器内容,每条命令创建一层,如FROM scratch创建起始层,RUNCOPY等命令创建后续层,各层以压缩.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创建叠加文件系统并进行文件操作和查看。
阅读 11
0 条评论