docker镜像大家都知道,就是一个个独立的软件包,包含某个软件所需的代码,环境,配置文件等,其实镜像实际上是由一层一层的文件系统组成,这个文件系统就是联合文件系统(UnionFS),这里简单说一下这个联合文件系统,简单来说,我们每次去pull一个应用(在linux中,一切皆文件),都是分层来的,比如:
每个文件叠加过后就是我们的应用,虽然是叠加而来,但是对外却是一个整体的系统文件,这是我们docker镜像基础
Docker镜像加载原理
简单介绍这个图:
-
bootfs(boot file system) 主要包含bootloader和kernel, bpotloader 主要是引导加载kernel,当我们加载镜像的时候,会通过bootloader加载kernal,Docker镜像最底层是bootfs,当boot加载完成后整个kernal内核都在内存中了,bootfs也就可以卸载,值得注意的是,bootfs是被所有镜像共用的,许多镜像images都是在base image(rootfs)基础上叠加的
-
rootfs (root file system),在bootfs之 上.包含的就是典型Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件。rootfs就是 各种不同的操作系统发行版,比如Ubuntu, Centos等等 。
分层理解
真正干活的是docker上的容器,不同容器都有一个共同的镜像,这个镜像有不同层级,每个层级都有自己的内容,可以共用,docker根据不同的需求来叠加镜像,从而对外暴露一个整体的镜像,每个容器都是精简版的linux系统,bootfs相当于鲸鱼的背,各容器内核kernal共用
Docker image 结构