是否可以从映像生成Dockerfile ?我想知道有两个原因:
我可以从存储库下载图像,但希望看到生成它们的配方。 我喜欢保存快照的想法,但一旦我完成了,有一个结构化的格式来回顾所做的事情会很好。
是否可以从映像生成Dockerfile ?我想知道有两个原因:
我可以从存储库下载图像,但希望看到生成它们的配方。 我喜欢保存快照的想法,但一旦我完成了,有一个结构化的格式来回顾所做的事情会很好。
当前回答
docker pull chenzj/dfimage
alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm chenzj/dfimage"
dfimage image_id
dfimage命令的输出如下:
$ dfimage 0f1947a021ce
FROM node:8
WORKDIR /usr/src/app
COPY file:e76d2e84545dedbe901b7b7b0c8d2c9733baa07cc821054efec48f623e29218c in ./
RUN /bin/sh -c npm install
COPY dir:a89a4894689a38cbf3895fdc0870878272bb9e09268149a87a6974a274b2184a in .
EXPOSE 8080
CMD ["npm" "start"]
其他回答
这是源自@fallino的答案,通过使用docker历史的输出格式选项进行了一些调整和简化。因为macOS和Gnu/Linux有不同的命令行实用程序,所以Mac需要不同的版本。如果你只需要其中一个,你可以只使用那些行。
#!/bin/bash
case "$OSTYPE" in
linux*)
docker history --no-trunc --format "{{.CreatedBy}}" $1 | # extract information from layers
tac | # reverse the file
sed 's,^\(|3.*\)\?/bin/\(ba\)\?sh -c,RUN,' | # change /bin/(ba)?sh calls to RUN
sed 's,^RUN #(nop) *,,' | # remove RUN #(nop) calls for ENV,LABEL...
sed 's, *&& *, \\\n \&\& ,g' # pretty print multi command lines following Docker best practices
;;
darwin*)
docker history --no-trunc --format "{{.CreatedBy}}" $1 | # extract information from layers
tail -r | # reverse the file
sed -E 's,^(\|3.*)?/bin/(ba)?sh -c,RUN,' | # change /bin/(ba)?sh calls to RUN
sed 's,^RUN #(nop) *,,' | # remove RUN #(nop) calls for ENV,LABEL...
sed $'s, *&& *, \\\ \\\n \&\& ,g' # pretty print multi command lines following Docker best practices
;;
*)
echo "unknown OSTYPE: $OSTYPE"
;;
esac
如果您对Docker中心注册表中的图像感兴趣,并想查看Dockerfile?。
例子:
如果你想查看图片“jupyter/ datasscience -notebook”的Dockerfile,在浏览器地址栏中输入Dockerfile,如下图所示。
https://hub.docker.com/r/jupyter/datascience-notebook/
https://hub.docker.com/r/jupyter/datascience-notebook/Dockerfile
注意: 并非所有映像都有Dockerfile,例如https://hub.docker.com/r/redislabs/redisinsight/Dockerfile 有时这种方式比在Github中搜索Dockerfile要快得多。
不知何故,我完全错过了公认答案中的实际命令,所以在这里,它在自己的段落中更明显一些,看看有多少人像我一样
$ docker history --no-trunc <IMAGE_ID>
这只需要两步就可以做到。首先提取映像,然后运行docker history命令。也如SS所示。
docker pull kalilinux/kali-rolling
docker history --format "{{.CreatedBy}}" kalilinux/kali-rolling --no-trunc
docker pull chenzj/dfimage
alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm chenzj/dfimage"
dfimage image_id
dfimage命令的输出如下:
$ dfimage 0f1947a021ce
FROM node:8
WORKDIR /usr/src/app
COPY file:e76d2e84545dedbe901b7b7b0c8d2c9733baa07cc821054efec48f623e29218c in ./
RUN /bin/sh -c npm install
COPY dir:a89a4894689a38cbf3895fdc0870878272bb9e09268149a87a6974a274b2184a in .
EXPOSE 8080
CMD ["npm" "start"]