Docker——镜像原理和镜像commit

镜像是什么?

镜像是一种轻量级 ,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码,运行时,库,环境变量和配置文件

UnionFS(联合文件系统)

Union文件系统是一种分层、轻量级,并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同的目录挂载到同一个虚拟文件系统下。

Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像

特性:一次同时加载多个文件系统,但是从外部看,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

Docker镜像加载原理

Docker的镜像其实是由一层一层的文件系统组成,这种层级的文件系统UnionFS。

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等标准目录和文件

对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令,工具和程序即可,因为底层直接用Host的kernel。自己只需提供rootfs就行。对于不同的linux发行版本,bootfs基本是一致的,可以公用bootfs.

所以虚拟机中的OS都是几个G,docker这个就几百M

分层的镜像

一个镜像由多个组件组成

为什么Docker镜像要采用这种分层结构呢?

最大的好处:共享资源

commit操作补充

docker commit 提交容器副本使之成为一个新的镜像

docker commit -m="提交的描述信息"  -a="作者"  容器Id  要创建的目标镜像名:[标签名]       注意,这里改的是容器

原文地址:https://www.cnblogs.com/zhaobobo001/p/15589783.html