一、Introduce

Image 是Docker用于创建并启动 docker 容器的重要组成部分。Image 中还有启动容器所需要的文件系统及其内容。
01.png
如图,Images 采用了分层的构建机制,底层为 bootfs,上层为 rootfs。

1.1、bootfs

用于系统引导的文件系统,包括 bootloader 和 kernel ,容器启动完成后会被从内存中移除以节约内存资源。

1.2、rootfs

位于 bootfs 之上,表现为 docker 容器的根文件系统。
docker 区别于 传统的 Linux系统。docker 中,rootfs 由内核挂载为“只读”模式,通过“联合挂载”(见下图)额外挂载一个“可写”层。
而在Linux中,系统内核挂载 rootfs 先挂载为 “只读”模式,在完成自检之后,重新挂载为“读写”模式。
在 Docker 的术语里,一个只读层被称为镜像,一个镜像是永久不会变的。

二、联合挂载(Union File System mMount)

02.png
在 Docker 容器中需要根据用户需求进行配置操作,而镜像是不可更改的,于是就需要在镜像最上层挂载一层 “writable”(可写层)。该挂载方式也称为联合挂载。

联合挂载:将一个个镜像进行堆叠形成应用容器。

03.png
每一个镜像都可能依赖于由一个或多个下层镜像组成另一个镜像。通常可以说,下层镜像是上层镜像的父镜像。

三、总结

3.1、镜像概念

基础镜像

一个没有任何父镜像的镜像,称为 基础镜像

镜像ID

所有镜像通过一个 64位十六进制字符串(内部是一个256 bit 的值)来表示,为简化使用,前 12 个字符可以组成一个短 ID,可以在命令行总使用。短 ID 有一滴的碰撞几率,所以服务器总返回长 ID。

不同的 image 可以共享相同的层