1. Docker镜像原理
1.1 什么是镜像
镜像时一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行运行环境开发的软件,包含某个软件运行时需要的代码,环境,库等等。(用Java来说就是:在Java中我们通常将我们的代码打包成jar包来发布运行,而镜像你可以理解为:jar包+运行环境=镜像)。
镜像的常见来源为:1. docker Hub拉取,2.别人提供,3.自己打包
1.2 镜像加载原理
1.2.1 联合文件系统
联合文件系统(UnionFS),是Linux系统的一个亮点,它是一种分层,轻量级而且高性能的文件系统,它可以支持对文件系统的修改作为一次次提交来一层层叠加,同时可以将不同目录挂载到同一个文件系统下来统一管理,可以很大的节省资源。docker镜像基础就是联合文件系统,在docker里面,我们的镜像可以通过分层来继承,基于基础镜像,我们可以创建很多自己的镜像。(注意:docker没有父镜像)
docker镜像是基于联合文件系统设计的,所以镜像其实是由一层一层的文件系统组成的。如上图所示:bootfs主要包含了BootLoader和kernel,前者主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,而我们的镜像也是这个样子的,包含boot加载器和内核。当boot加载器加载完成后,内核就在内存中了,此时内存的使用权就开始由kernel管理,bootfs就会被卸载。(你可以理解为:bootfs只是用来加载内核的,加载完后就被卸载掉了)
rootfs在bootfs上面,主要包含了典型Linux系统中的一些文件,如:/dev/,/etc/订单,rootfs就是不同操作系统发行版,如:Ce