镜像仓库主要功能是进行镜像存储、镜像管理和镜像分发。每一个仓库可以包含多个镜像,用标签进行区分。通常在使用镜像时,要充分考虑镜像仓库类型、仓库应用、具体应用版本三个要素。
通过镜像仓库可以方便地在多个运行环境之间共享镜像,通过容器快速模拟相同的运行环境以运行应用,避免因运行环境的不同而导致应用运行异常或行为不一致。
镜像中包含应用的主体,以及应用需要的运行环境、工具集等。在构建镜像时,可以指定镜像的镜像仓库、仓库及标签,也可以在构建完成后为镜像添加镜像仓库、仓库及标签,从而将同一个镜像推送到不同的镜像仓库中。镜像仓库在镜像共享中处于中心的位置,在镜像构建、持续集成、镜像部署、镜像发布中均与镜像仓库息息相关,如图1所示。
图1 镜像仓库
镜像仓库直接管理的对象不是具体的镜像,而是仓库。仓库通过标签管理镜像,如图2所示。
图2 镜像管理
由元数据和块文件组成镜像,管理元数据是镜像仓库的核心职能。元数据是一个镜像的核心信息,包含镜像的镜像仓库、仓库、标签、校验码、文件层、镜像构建描述等信息。块文件是组成镜像的联合文件层的实体,每一个块文件是一个文件层,内部包含对应文件层的变更。
图3镜像块文件依赖
镜像仓库通过文件层的校验码对每个块文件进行管理。当多个镜像基于同一个基础镜像构建时,这些镜像拥有相同的基础块文件,这些镜像在镜像仓库中共享这部分块文件。也因此,在删除镜像时,不能直接删除镜像引用的所有镜像块文件,而是由专门的垃圾回收器来清理没有被引用的块文件。