Docker镜像加载原理-联合文件系统
理解什么是镜像
一、什么是镜像
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件等。
所有的应用,直接打包成Docker镜像,就可以直接跑起来!
二、如何得到镜像
1、从远程仓库下载
2、朋友拷贝
3、自己制作镜像DockerFile
UnionFS联合文件系统
一、定义
联合文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。联合文件系统是Docker镜像的基础。镜像可以通过分层来继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
二、特性
一次同时加载多个文件系统,但是从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
三、Docker镜像加载原理
Docker镜像实际上是由一层层的文件系统组成的,这种层级的文件系统就叫做联合文件系统
bootfs(boot file system)主要包含了bootloader和kernel内核,bootloader主要引导加载下kernel,Linux刚启动会加载bootfs文件系统,Docker镜像的最底层就是bootfs。这一层与我们典型的Linux系统是一样的,包含了boot加载器和内核。当boot加载完成之后整个内核就在内存中了,此时内存的使用权已经由bootfs转交给内核,此时系统也会卸载bootfs
rootfs(root file system),在bootfs之上。包含的就是典型的Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件,rootfs就是各种不同的操作系统发行版,比如Centos等等
Docker镜像原理-分层理解
分层的镜像
我们在Docker下载一个镜像,观察打印的日志,发现有一些文件不需要下载,已经存在了!
[root@test ~]# docker pull redis
Using default tag: latest
Trying to pull repository docker.io/library/redis ...
latest: Pulling from docker.io/library/redis
26c5c85e47da: Already exists #该层文件已经存在,不需要重新下载
39f79586dcf2: Pull complete
79c71d0520e5: Pull complete
60e988668ca1: Pull complete
873c3fc9fdc6: Pull complete
50ce7f9bf183: Pull complete
Digest: sha256:f50031a49f41e493087fb95f96fdb3523bb25dcf6a3f0b07c588ad3cdbe1d0aa
Status: Downloaded newer image for docker.io/redis:latest
一、分层的理解
所有的Docker镜像都起始于一个基础的镜像,当进行修改的时或增加新的内容时,就会在当前的镜像层上,创建新的镜像层。
举例说明:
二、分层特点
Docker镜像都是只读的,当容器启动的时候,一个新的可写层被加载到镜像的顶部!这一层就是我们通常说的容器层,容器之下的都叫做镜像层
至此,关于Docker的镜像加载原理和镜像的分层原理已经介绍完毕。后续还会持续更新,敬请期待~~~