我们有时候想知道官方镜像的 dockerfile 是怎么写的,需要根据 docker image 反推 docker file
命令如下:

1
image=ubuntu:18.04
1
2
3
4
5
6
docker history $image --no-trunc \
--format '{{.CreatedBy}}'|\
sed "s?/bin/sh\ -c\ \#(nop)\ ??g"|\
sed "s?/bin/sh\ -c?RUN?g" |\
tac|\
tee Dockerfile

稍微解释一下命令的意思

1
2
3
4
--no-trunc: 不截断输出 
--format {{.CreatedBy}}: 格式化输出, 只输出 CreatedBy 字段
sed: 删除替换指定的字符串, 此处使用 `?` 作为 sed 的分隔符。常规 sed 分隔符为 `/` 或者 `#`
tac: 将所有管道符号传来的内容反向输出