目录
1、概述
1.1 什么是镜像?
Docker镜像是一种轻量级,可以执行的独立软件包,用于打包软件运行环境,或者基于某种运行环境的软件。一个镜像内包含了某个软件所需要的所有内容,包括了代码,运行时,库,环境变量和配置文件。镜像可以理解为模板,对容器来说开箱即用。
1.2 联合文件系统UnionFS
它是一种分层,轻量级,并且高性能的文件系统。它将对文件系统的修改作为一次提交来一层层的在原先的文件系统中进行叠加;同时它可以将不同的目录挂载到同一个虚拟文件系统下(unite several directories into to a single virtual filesystem)。
Union文件系统是Docker镜像的基础。镜像可以通过分层进行继承,基于基础镜像,可以制作各种具体的应用镜像。
一个镜像文件实际上是由多个文件系统组成,但是镜像为我们提供了一个统一的视角,让我们凭直觉认为:我们操作的是一个整体的文件系统。
因此,当我们从阿里云仓库中下载centos和tomcat镜像时,并不是下载了一个镜像,而是同时下载了很多分镜像,然后向我们展现了最外层的镜像ID。
1.3 bootfs和rootfs
通常而言,Linux的操作系统由两类文件系统组成:bootfs(boot file system)和rootfs(root file system),它们分别对应着系统内核与根目录文件。bootfs层主要为系统内核文件,这层的内容是无法修改的。当我们的系统在启动时会加载bootfs,当加载完成后整个内核都会存到内存中,然后系统会将bootfs卸载掉。
而rootfs层则包含了系统中常见的目录和文件,如/bin,/etc,/proc等等。
bootfs(boot file system)主要包含 bootloader 和 Kernel , bootloader 主要是引导加 kernel, Linux刚启动时会加载 bootfs 文件系统,在 Docker 镜像的最底层是 bootfs 。这一层与我们典型的 Linux/Unix系统是一样的,包含 boot 加载器和内核。当 boot 加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs 转交给内核,此时系统也会卸载 bootfs 。
rootfs(root file system),在 bootfs之上。包含的就是典型 Linux系统中 的 /dev,/proc,/bin,/etc 等标准目录和文件。 rootfs就是各种不同的操作系统发行版,比如 Ubuntu, Centos 等等。平时我们安装进虚拟机的CentOS都是好几个G,为什么Docker这里才200M?
对于精简的 OS,rootfs 可以很小,只需要包合最基本的命令,工具和程序库就可以了,因为底层直接用宿主机的kernel,自己只需要提供 rootfs 就可以了。由此可见对于不同的Linux发行版, bootfs 基本是一致的,rootfs会有差別,因此不同的发行版可以共用 bootfs。
Docker的镜像技术可以使用宿主机的bootfs层,这使得镜像本身只需要封装rootfs层