1. UnionFS联合文件系统
联合文件系统是一种分层、轻量级并且高性能的文件系统,是docker镜像的基础,可以将不同目录挂载到同一个虚拟文件系统下
可以基于基础镜像(没有父镜像)进行修改,每一次对文件系统的修改都是在继承父镜像,叠加成一个新的文件系统。最后多个文件系统联合形成一个新的镜像
联合文件系统将镜像的各层文件系统叠加起来,对外是一个文件系统,包含所有的底层文件和目录
2. Docker镜像加载原理
bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel。不同的操作系统发行版的bootfs基本是一样的。镜像层是只读的
和Linxu一样,Docker从镜像启动容器时,会加载最底层的bootfs引导文件系统。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统会卸载bootfs
rootfs(root file system),在bootfs之上。包含的就是典型Linux系统中的/dev、/proc、/bin、/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等。容器层是可读可写的
3. 镜像分层的好处
继承:新的镜像是继承父镜像而来的,所有镜像都是从base镜像来的
磁盘储存和内存加载:多个镜像继承同一个父镜像,父镜像(如base镜像)在Docker Host上保存一份,且加载时也只加载一份到内存中
4. docker commit-从容器生成新镜像
docker commit将容器,包括容器中我们自己编写的文件,打包成一个新的镜像。再使用此镜像启动一个新的容器,还会有我们自己编写的文件
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 7614ae9453d1 4 months ago 113MB
hello-world latest feb5d9fea6a5 7 months ago 13.3kB
centos latest 5d0da3dc9764 7 months ago 231MB
[root@docker ~]#
[root@docker ~]# docker commit -m "docker commit描述" -a="docker commit作者" 471be286443a bulut/my-centos:8.8
sha256:c1ba58473199c5818a845c6361df352350ba74b1e8955f249535c55a27a9db77
[root@docker ~]#
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
bulut/my-centos 8.8 c1ba58473199 4 seconds ago 231MB
redis latest 7614ae9453d1 4 months ago 113MB
hello-world latest feb5d9fea6a5 7 months ago 13.3kB
centos latest 5d0da3dc9764 7 months ago 231MB
[root@docker ~]#