互联网技术 / 互联网资讯 · 2024年1月2日

如何从 Docker 镜像提取 Dockerfile

在技术交流群闲聊时,朋友提出了一个关于 Docker 的问题:如果替换配置文件无效,且没有原始的 Dockerfile,是否存在直接从容器或镜像生成 Dockerfile 的方法?

虽然 Docker History 能显示历史层级,但要把这些信息直接整理成一个完整的 Dockerfile 仍然需要手动编写。

经过搜索,发现 dfimage 就是这样一款工具。

dfimage 基于一个 Alpine 镜像运行,启动时会将 Docker 的套接字 docker.sock 映射到容器内部,通常把这一步封装成一个别名来使用。

我们以 Nginx 镜像为例进行试验。

先拉取一个 Nginx 镜像;如果本地已经有就直接使用。然后按照前述方式创建一个 dfimage 的别名。

设置好别名后,使用 dfimage 就能生成 Nginx 的 Dockerfile;本质上,它是在容器内执行一个工具,完成后就会删除容器。

执行结束后,就可以看到完整的 Dockerfile。