分层镜像
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,他包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件。将所有的应用和环境直接打包为docker镜像,就可以直接运行。
Title:分层镜像原理
Container->Image1: references parent
Image1-->Image2: reference parent
Container-->Image2: reference parent
Image2->>Base Image: 基础环境
Base Image->>bootfs: 构建镜像运行的操作系统环境
bootfs->Kernel: 上层的镜像提供kernel内核
Note right of Kernel: AUFS,LXC,Bootfs,
分层原则
1. • Dockerfile中的每个指令都会创建一个新的镜像层
2. • 镜像层将被缓存和使用
3. • 某一层的镜像缓存失效后它之后的镜像层缓存都会失效 :
- https://cloud.tencent.com/developer/article/1633016
注意:
> (1)如上图所示,Docker镜像层都是只读的,容器层是可写的。当容器启动时,一个新的可写层被加载到镜像顶部,这一层通常被称作“容器层”,“容器层”之下的都叫做“镜像层”。
> (2)对容器的所有更改(无论添加、删除、还是修改文件)都只会发生在容器层中。上图中只有透明的writable Container是暴露给用户的。
分层结构
1. base image(基础/系统镜像层):构建镜像运行的操作系统环境
2. add image(run指令运行的镜像层):比如nginx镜像的yum安装模块,或者nginx编译安装的指令,使用镜像封装每一个run执行命令
3. Container(可读写执行层):
总结:
1. docker镜像层位于bootfs之上
2. 每一层镜像成为base image/底包(操作系统环境变量)比如centos dbian
3. 容器层(可读可写),在最顶层。是docker server提供给docker client
4. 容器层以下都是readonly只读,docker将readonly的FS层成为image
镜像加载
Docker的镜像是由一层一层的文件系统组成,也就是以UnionFS(联合文件系统)堆叠构成。
- rootfs(root file system)包含的是典型Linux系统中的/dev、/proc、/bin、/etc等标准目录和文件,其实rootfs就是各种不同的操作系统发行版,比如Ubuntu、Centos等等。
- bootfs(boot file system)主要包含bootloader和kernel、bootloader主要是引导加载kernel、Linux刚启动时候加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs。 这一层与典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成后整个内核就在内存中了,内存的使用权由bootfs转交给内核,此时系统也会写在bootfs。
- 至此,我们就比较容易理解docker容器其实就是一个简易版的Linux环境,它包含root用户权限、进程空间、用户空间和网络空间、以及运行在它上面的应用程序。
评论区