目标:获取镜像中某几层,或者将镜像文件拆开,对其进行删减后再拼装起来。
镜像加密都是使用:sha256sum
一、导出镜像。
docker save -o image-test.tar.gz 192.168.0.7/ky_test/ky-api:1.0.0
二、解压镜像文件(在单独的目录中)
tar xf image-test.tar.gz
三、查看文件
repositories 记录了原镜像的名称、标签、校验码
manifest.json 记录配置文件的名称、原镜像名称、标签、Layers(镜像分层结构关系,第一行表示最底层镜像,以此类推)
加密字符串.json 该文件为镜像的配置文件,按镜像层次记录这指定镜像过程中自定义的信息,如环境变量、执行命令、文件传输。最后diff_ids字段还记录数据层每一层对接的文件。
这上面的验证字符串 其实是通过当前层layer.tar文件通过sha256sum计算获得的。
其他目录 则是每一层的数据文件
json 记录本层的详细信息,如运行用户、环境变量、执行命令等
layer.tar 本层的源数据
tar xf layer.tar 解压源文件
可以查看到本层的源数据
基础镜像层往往是根下的文件
其他层是记录变动的数据
代码层存放的就是代码数据了
VERSION 本层的tag信息
四、镜像重组
1、将集成的是数据归档成一个tar文件
2、编写dockerfile文件---声明使用空镜像,如下
FROM scratch
ADD layer.tar /
cmd ["/bin/sh"]
3、制作镜像
docker build -t test:v1 .
4、运行镜像,查看镜像内是否是期望的结果。
docker run -dti --name=mytest2 test:v1