为了好玩 - 图像保存在包含图像层路径的manifest.json
中。您可以将这些层ADD
到scratch
image中。
在由
docker save
生成的
tar
文件中包含了公共
ubuntu:20.04
的
manifest.json
。保留HTML标签。
[
{
"Config": "4e2eef94cd6b93dd4d794c18b45c763f72edc22858e0da5b6e63a4566a54c03c.json",
"RepoTags": [
"ubuntu:20.04"
],
"Layers": [
"6d0f49bfc6be64bfab1f9c1fd2ed975f1b31300932f6e6a58431eba145aeef1f/layer.tar",
"168251688b4a0d65c58c010d18c2e5e7bc7b1288e30e54f651e683fe7af5983c/layer.tar",
"a48aad357767ae0e674c26ed749956078c003949bcd931af931dfc272cc96a9c/layer.tar",
"a9d70cfea3838f5442dce79f10ea881c4705f3bbc1123a73317f90d0958341fb/layer.tar"
]
}
]
...层可以添加到一个新的图像中,该图像是使用FROM scratch
构建的:
FROM scratch
ADD 6d0f49bfc6be64bfab1f9c1fd2ed975f1b31300932f6e6a58431eba145aeef1f/layer.tar /
ADD 168251688b4a0d65c58c010d18c2e5e7bc7b1288e30e54f651e683fe7af5983c/layer.tar /
ADD a48aad357767ae0e674c26ed749956078c003949bcd931af931dfc272cc96a9c/layer.tar /
ADD a9d70cfea3838f5442dce79f10ea881c4705f3bbc1123a73317f90d0958341fb/layer.tar /
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
CMD ["/bin/bash"]
注意: 从父镜像设置CMD
和ENV
- 配置可在manifest.json
的Config
键引用的文件中找到。
如果我们使用
docker inspect
命令检查镜像并将其与原始镜像进行比较,那么这些层几乎是相同的:
在
ubuntu:20.04
镜像的最后一层中,包含
/run/systemd/container
配置文件 - 构建镜像中的
md5sum
文件与原始镜像相同,但层哈希不同 - 镜像历史记录保存在配置文件中,但丢失了(如果您从
FROM ubuntu:20.04
开始,扩展镜像,保存它,解压文件并检查配置,则历史记录是完整的)。
可以根据需要扩展
docker镜像
:
FROM scratch
ADD 6d0f49bfc6be64bfab1f9c1fd2ed975f1b31300932f6e6a58431eba145aeef1f/layer.tar \
168251688b4a0d65c58c010d18c2e5e7bc7b1288e30e54f651e683fe7af5983c/layer.tar \
a48aad357767ae0e674c26ed749956078c003949bcd931af931dfc272cc96a9c/layer.tar \
a9d70cfea3838f5442dce79f10ea881c4705f3bbc1123a73317f90d0958341fb/layer.tar /
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
RUN apt-get update && \
apt-get install -y --no-install-recommends cowsay && \
rm -rf /var/cache/apt/lists/*
CMD ["cowsay"]