JayFighting 2020-06-09
Docker 镜像含有启动容器所需要的文件系统及其内容, 因此, 其用于创建并启动 docker 容器.
Docker 采用分层构建机制, 最底层为 bootfs , 其之为 rootfs.
传统模式中,系统启动之时, 内核挂载 rootfs 时会首先将其挂载为 "只读" 模式, 完整性自检完成后将其重新挂载为只读模式.
Docker 中, rootfs 有内核挂载为 "只读模式" ,而后通过 "联合挂载" 技术额外挂载一个 "可写" 层.
位于下层的镜像称为父镜像(parent image), 最底层的称为基础镜像(base image)
最上层为 "可写层",以下均为 "只读" 层.
启动容器时, docker daemon 会试图从本地获取相关的镜像, 本地镜像不存在时, 其将从 Registry 中下载镜像并保存到本地.
Docker Registry 分类:
Registry 用于保存 docker 镜像, 包括镜像的层次结构和元数据.用户可自建 Registry, 也可以使用官方的 Docker Hub
OvrlayFs 是目前使用比较广泛的层次文件系统, 他是类似 Aufs 的一种堆叠文件系统, 与 2014 年正式合入 Linux 3.18 主线内核.
OverlayFS文件系统,实现简单,而且性能很好,可以充分利用不同或则相同Overlay文件系统的Page Cache,具有:上下合并、同名遮盖、写时拷贝等特点。
Docker虚拟化Overlay存储驱动利用了很多OverlayFS特性来构建和管理镜像与容器的磁盘结构。 从Docker1.12起,Docker也支持Overlay2存储驱动,相比于Overlay来说,Overlay2在inode优化上更加高效。但Overlay2驱动只兼容Linux kernel 4.0+以上的版本。
OverlayFS加入Linux Kernel主线后,在Linux Kernel模块中的名称从Overlayfs改名为Overlay。在真实使用中,OverlayFS代表整个文件系统,而Overlay/Overlay2表示Docker的存储驱动。