是否可以从图像生成 Dockerfile?我想知道有两个原因:
我可以从存储库下载图像,但想查看生成它们的配方。
我喜欢保存快照的想法,但是一旦我完成了,最好有一个结构化的格式来回顾所做的事情。
原文由 user1026169 发布,翻译遵循 CC BY-SA 4.0 许可协议
是否可以从图像生成 Dockerfile?我想知道有两个原因:
我可以从存储库下载图像,但想查看生成它们的配方。
我喜欢保存快照的想法,但是一旦我完成了,最好有一个结构化的格式来回顾所做的事情。
原文由 user1026169 发布,翻译遵循 CC BY-SA 4.0 许可协议
要了解如何构建 docker 映像,请使用 docker history --no-trunc
命令。
您可以从图像构建 docker 文件,但它不会包含您想要完全了解图像是如何生成的所有内容。您可以合理地提取 dockerfile 的 MAINTAINER、ENV、EXPOSE、VOLUME、WORKDIR、ENTRYPOINT、CMD 和 ONBUILD 部分。
以下脚本应该适合您:
#!/bin/bash
docker history --no-trunc "$1" | \
sed -n -e 's,.*/bin/sh -c #(nop) \(MAINTAINER .*[^ ]\) *0 B,\1,p' | \
head -1
docker inspect --format='{{range $e := .Config.Env}}
ENV {{$e}}
{{end}}{{range $e,$v := .Config.ExposedPorts}}
EXPOSE {{$e}}
{{end}}{{range $e,$v := .Config.Volumes}}
VOLUME {{$e}}
{{end}}{{with .Config.User}}USER {{.}}{{end}}
{{with .Config.WorkingDir}}WORKDIR {{.}}{{end}}
{{with .Config.Entrypoint}}ENTRYPOINT {{json .}}{{end}}
{{with .Config.Cmd}}CMD {{json .}}{{end}}
{{with .Config.OnBuild}}ONBUILD {{json .}}{{end}}' "$1"
我将其用作脚本的一部分,将正在运行的容器重建为图像: https ://github.com/docbill/docker-scripts/blob/master/docker-rebase
如果您希望能够重新打包映像,则 Dockerfile 主要有用。
要记住的是,docker 映像实际上可以只是真实或虚拟机的 tar 备份。我用这种方式制作了几个 docker 图像。甚至构建历史也显示我导入了一个巨大的 tar 文件作为创建图像的第一步……
原文由 user6856 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答780 阅读✓ 已解决
1 回答674 阅读✓ 已解决
1 回答617 阅读
你可以。大多。
注意:它不会生成
Dockerfile
您可以直接与docker build
一起使用;输出仅供参考。它将自动拉取目标 docker 镜像并导出
Dockerfile
。参数-sV=1.36
并不总是需要。参考: https ://hub.docker.com/repository/docker/alpine/dfimage
如果您选择特定标签,现在 hub.docker.com 会直接显示带有详细命令的图像层。
奖金
如果你想知道每一层有哪些文件被改变了
左边,你看到每一层的命令,右边(用tab跳转),黄线是那个层中一些文件被改变的文件夹
(使用空格折叠目录)
旧答案
以下是旧答案,它不再起作用了。