Docker - 如何从镜像生成Dockerfile

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
Rating: