Docker 镜像是一个特殊的文件系统,除了提供容器运行时所以需要的程序、库依赖、资源、配置等文件之外,还包含容器运行时所需要的一些配置参数(如:匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在镜像被创建之后不会被改变!
我们知道操作系统分为内核空间、用户空间,在内核启动后会挂载一个 root 文件系统
从而提供用户空间的支持。导读中提到过 Docker 是直接在主机内核上运行,因此 Docker 镜像其实也就是基于 Linux 的控制组、命名空间等技术提供了一套最小的 root 文件系统
。
镜像是一队只读层的堆叠,除了最下层,其他层都会有一个指针指向下一层,如下图(图片来自互联网):
由于镜像包含操作系统完整的 root 文件系统
,镜像的体积旺旺是非常庞大的,因此 Docker 在设计时就考虑到利用 Union FS 的技术。这项技术将文件系统设计为分层储存的架构,因此镜像实际上就是多层镜像文件组合而成。这样做的好处有:
- 分层存储,前一层是后一层的基础,镜像层次清晰;
- 每个独立的分层可以被其他镜像重复引用,大大节省了磁盘空间;
可以从注册服务器拉取/推送镜像、给镜像打标签、查看镜像历史、导入/导出镜像等,如下图(图片来自互联网):