- 镜像,轻量级,可执行的独立软件包
- 用来打包软件运行环境和基于运行环境开发的软件
- 包含了运行某个软件所需的所有内容
- 代码
- 运行库
- 环境变量
- 配置文件
UnionFS
联合文件系统
union 联合文件系统 是一种分层,轻量级 且 高性能的 文件系统
支持对文件系统的修改作为一次提交来一层层叠加,同时可以将不同目录挂载到同一虚拟文件系统下
UnionFS是docker镜像的基础
镜像可以通过分层作为基础,基于镜像基础(没有父镜像),就可以制作各种具体的镜像
特性
- 一次同时加载多个文件系统,但是从外面看起来,只能看到一个文件系统
- 联合加载会把各层文件系统叠加起来,最终文件系统会包含所有底层的文件和目录
Docker 镜像加载原理
bootfs
- Linux刚启动就会加载bootfs文件系统
- docker镜像的最底层是bootfs
- 和典型的Linux/Unix系统一致,包含boot加载器和内核
- 当boot加载完成后整个内核都在内存中
- 此时的内存使用权已由bootloader转交给内核,系统就会卸载bootloader
- bootloader
- 主要引导和加载kernel
- kernel
- 加载之后,就会卸载bootloader
rootfs
在bootfs之上,包含的就是典型的/dev, /proc, /bin,/etc等标准目录和文件
bootfs就是各种不同操作系统的发行版
对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以
因为底层直接使用Host的kernel,自己只需要提供rootfs就可以
对于不同的Linux发行版,bootfs基本相同,rootfs会有差别,不同的发行版可以共用bootfs
典型的Linux启动到运行需要两个FS – bootfs + rootfs
不同的发行版可以公用bootfs
Docker镜像采用分层结构
- 共享资源
- 多个镜像都是从Base镜像构建而来,宿主机只需要在磁盘上保存一份Base镜像,同时内容中也只需要加载一份Base镜像,就可以为所有容器服务
- 镜像的每一层都可以被共享
特点
- 当容器启动时,一个新的可写层被加载到镜像的顶部,这一层被称为“容器层”,容器层之下都是“镜像层”,readonlyDocker
Docker Commit 操作
docker commit -m "提交的信息描述" -a "作者" 容器ID 要创建的目标镜像名:[tag]
提交容器副本使之成为一个新的镜像