此篇为Docker笔记,文章可能存在疏忽,建议直接观看原视频。
视频地址:https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0
参考:https://blog.csdn.net/11b202/article/details/21389067
Docker镜像讲解
镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容:代码、库、环境变量、配置文件等。
所有应用,直接打包成Docker镜像,就可以直接跑起来。
Docker镜像加载原理
-
UnionFS
(联合文件系统)UnionFS
是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。UnionFS
是Docker
镜像的基础,镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。(不同 Docker 容器就可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率。)特性:一次同时加载多个文件系统,但从外面看来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终文件系统会包含所有底层的文件和目录。
-
分层原理 (来自 https://blog.csdn.net/11b202/article/details/21389067)
Docker的文件系统分为两层:
bootfs
和rootfs
;bootfs
主要包含boostloader
和kernel
,bootloader
主要引导加载kernel
,Linux
刚启动时会加载bootfs
,在内核启动之后,bootfs
实际上会unmount
掉。用户不能对这层做任何修改。对于
Linux
上不同版本的问题,docker
可以同时运行多个rootfs
。Docker的文件系统是分层的,它的
rootfs
在mount
之后会转为只读模式。 Docker在它上面添加一个新的文件系统,来达成它的只读。事实上,从下图中,我们能看到多个只读的文件系统,Docker中把他们称为 层。image是只读的,container部分则是可写的。如果用户想要修改底层只读层上的文件,这个文件就会被先拷贝到上层,修改后驻留在上层,并屏蔽原有的下层文件。
commit镜像
# docker commit 提交容器成为一个新的副本
# docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]
$ docker commit -a="zhucz" -m="copy webapps.dist to webapps" 739702468c62 tomcat02:1.0
sha256:9a26e1374d18728160cd009f744002aa39788bcb141f2bea4b935f270cd0fbbb
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 9a26e1374d18 12 seconds ago 684MB
tomcat 9.0 86783bb5af6c 4 days ago 680MB