Docker - 如何从镜像生成Dockerfile
docker的历史记录包含了所有的docker层的生成过程,可以基于此来生成Dockerfile:
1
docker history --no-trunc $argv | tac | tr -s ' ' | cut -d " " -f 5- | sed 's,^/bin/sh -c #(nop) ,,g' | sed 's,^/bin/sh -c,RUN,g' | sed 's, && ,\n & ,g' | sed 's,\s*[0-9]*[\.]*[0-9]*\s*[kMG]*B\s*$,,g' | head -n -1
命令解释:
-
tac
将文件倒序 tr -s ' '
删除多余的空格-
cut -d " " -f 5-
删除第一列 sed 's,^/bin/sh -c #(nop) ,,g'
remove /bin/sh calls for ENV,LABEL… sed ‘s,^/bin/sh -c,RUN,g’ remove /bin/sh calls for RUN sed ‘s, && ,\n & ,g’ pretty print multi command lines following Docker best practices sed ‘s,\s[0-9][.][0-9]\s[kMG]B\s*$,,g’ remove layer size information head -n -1