怎么从 docker history 中任意一层创建出来一个新的镜像

2022-12-15 21:06:24 +08:00
 fqzz

git 可以从任意的 commit 创建出来一个 branch ,那 docker pull 下来的镜像,我怎么从 history 中的任意一层创建出来镜像?

1010 次点击
所在节点    Docker
5 条回复
CEBBCAT
2022-12-15 22:28:10 +08:00
你做过的研究是?
dzdh
2022-12-15 23:07:04 +08:00
目测行不通。

假设有一层是 apt-get install nginx

你要这一层的什么?只要 nginx 的 docs 、binary 、config ?还是从第一层开始的 from ubuntu/debian/centos/.... 都要?

如果只要 nginx 的 docs/binary/config 。那下载 deb 解压 from scratch copy 就行了。

如果是从第一层开始的全部都要,那你 from 他把那一层之后的修改都删了就行了呗?
dcsuibian
2022-12-15 23:52:56 +08:00
wunonglin
2022-12-16 04:05:38 +08:00
你的目的是什么
fqzz
2022-12-16 10:45:03 +08:00
@wunonglin @dzdh
我补充一下背景,有一台机器用于打包镜像,有很多镜像基于同一个 base 打出来的,但是这个 base 没有被推到仓库里面,只把最终需要发布的镜像推上去了。所以这个机器重装后,找不到 base 镜像了。

@CEBBCAT
我也做过啥研究,看了 @dcsuibian 提到的帖子,但是这个好像依赖本地的 cache 。我这 docker history 看到一堆 missing ,不知道咋操作,比如:
```
➜ ~ docker history mcr.microsoft.com/mssql/server:2019-CU16-ubuntu-20.04
IMAGE CREATED CREATED BY SIZE COMMENT
f554c0722914 8 months ago /bin/sh -c #(nop) CMD ["/opt/mssql/bin/sqls… 0B
<missing> 8 months ago /bin/sh -c #(nop) ENTRYPOINT ["/opt/mssql/b… 0B
<missing> 8 months ago /bin/sh -c #(nop) USER mssql 0B
<missing> 8 months ago /bin/sh -c /tmp/install.sh 225MB
<missing> 8 months ago /bin/sh -c #(nop) COPY dir:acfdd267f3b0f4031… 1.34GB
<missing> 8 months ago /bin/sh -c #(nop) EXPOSE 1433 0B
<missing> 8 months ago /bin/sh -c #(nop) LABEL vendor=Microsoft co… 0B
<missing> 8 months ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 8 months ago /bin/sh -c #(nop) ADD file:b83df51ab7caf8a4d… 72.8MB
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/902811

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX