Docker 镜像是一个 ReadOnly
的 Docker 容器模板,含有 Docker 容器运行所需要的内容。
我们已经提过 Docker 镜像被设计为分层结构体系,Docker 通过 Union FS 将这些不同的镜像层组合在一个镜像中。Union FS 是实现 Docker 镜像的技术基础。
目前 Docker 支持的联合文件系统种类包括:OverlayFS
, AUFS
, Btrfs
, VFS
, ZFS
和 Device Mapper
。关于联合文件系统请参考底层实现中的章节:
{% page-ref page="../chapter-8-core-technology/union-file-system.md" %}
基本上搞懂了上面讲的联合文件系统,大致就明白了 Docker 镜像的实现原理,我们可以简单归纳出如下几个关键词:
- 分层存储:基础镜像 + 父镜像机制;
- 写时复制:即
copy-on-write
,镜像启动时不需要单独复制一份镜像,而是将所有的镜像层以只读的方式挂载到同一个挂载点,然后在上面覆盖一个读写层即可 - 联合加载:同一个挂载点挂载多个文件系统,将挂载点的原目录与被挂载内容进行整合,使得最终可见的文件系统将会包含整合之后各层的文件和目录;
- 内容寻址:根据文件内容索引镜像和镜像层,对镜像层的内容进行校验和,生成一个 Hash 值并作为镜像层的唯一标识,提高了镜像的安全性,一定层度上避免了镜像层的 ID 冲突,增强了镜像的共享。