在技术交流群闲聊时,朋友提出了一个关于 Docker 的问题:如果替换配置文件无效,且没有原始的 Dockerfile,是否存在直接从容器或镜像生成 Dockerfile 的方法?
虽然 Docker History 能显示历史层级,但要把这些信息直接整理成一个完整的 Dockerfile 仍然需要手动编写。
经过搜索,发现 dfimage 就是这样一款工具。
dfimage 基于一个 Alpine 镜像运行,启动时会将 Docker 的套接字 docker.sock 映射到容器内部,通常把这一步封装成一个别名来使用。
我们以 Nginx 镜像为例进行试验。
先拉取一个 Nginx 镜像;如果本地已经有就直接使用。然后按照前述方式创建一个 dfimage 的别名。
设置好别名后,使用 dfimage 就能生成 Nginx 的 Dockerfile;本质上,它是在容器内执行一个工具,完成后就会删除容器。
执行结束后,就可以看到完整的 Dockerfile。
