1.镜像是什么?
定义: 镜像是种轻量级的, 可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件, 它包含运行某个软件所需的所有内容,包括代码、运行时所需的库、环境变量和配置文件
2.镜像为什么会这么大
原因: 一个软件镜像不仅仅是原来软件包,还包含软件包所需的操作系统依赖,软件自身依赖所组成
- UnionFS(联合文件系统)
Union文件系统是一种分层,轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。 Union文件系统是 Docker镜像的基础。
这种文件系统特性:就是一次同时加载多个文件系统,但从外面看起来,只能看刭个文件系统,联合加载会把各层
文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
3.Docker镜像原理
docker的镜像实际是由一层一层的文件系统组成
boots( boot file system)主要包含 bootloader和 kernel,, bootloader主要是引导加载kene, Linux刚启动时会加载boot文件系统。在 docker镜像的最底层就是boots这一层与 iLinux/Unⅸ系统是一样的,包含bo加载器( bootloader)和内核( kernel)。当boot加载完后整个内核就都在内存中了,此时內存的使用权已由 boots转交给内核,此时会卸载bos
rootfs( (root file system),在 boots,之上,包含的就是典型的inux系统中的dev,/proc,/bin,letc等标准的目录和文件。rofs就是各种不同的操作系统发行版比如 Ubuntu/Centos等等。
我们平时安装进虚拟机的 centos都有1到几个GB,为什么 docker这里才200MB?对于一个精简的oS, rootfs可以很小,只需要包括最基本的命令,工具,和程序库就可以了,因为底层直接使用Host的κena,自己只需要提供 rootfs就行了。由此可见不同的inux发行版,他们的 boots是一致的,ros会有差别。因此不同的发行版可以共用bootfs

为什么采用UnionFS?
好处:最大的一个好处就是资源共享, 采用分层机制实现基础层共享, 从而减小docker仓库整体体积
4. 镜像的结构
镜像是分层结构, 每一层称为一个Layer
- BaseImage层: 包含基本的系统函数库、环境变量、文件系统
- Entrypoint: 入口, 是镜像中应用启动的命令
- 其他: 在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置

