从存储库创建DockerFile

问题描述 投票:-1回答:2

我不知道是否可以从现有的专用存储库创建DockerFile。我创建了一个容器并安装了配置好的服务器(我不记得所有命令了),所以现在我希望将其与我的GitHub帐户同步,因此每当我推送分支时,它也会更新映像中的更改。对于自动构建,它表示我需要一个DockerFile,但我从未创建过一个。是否可以从现有映像/容器自动创建dockerfile。使用docker history命令无济于事,因为我使用docker exec进行了服务器配置。可能吗?

提前感谢。

docker github build dockerfile
2个回答
0
投票

您需要重新开始。 Docker也不记得您在容器内运行的命令,因此它也无法重构Dockerfile。无论如何,运行docker build总是从干净的环境开始,因此无需大量手动安装即可构建Dockerfile很有帮助。

对于大多数语言,您可能只需要查找一个示例Dockerfile就可以轻松找到它。其中大多数都是非常通用的形式:启动FROM适当的基础映像,安装OS依赖项,安装库依赖项,COPY应用程序并在其中构建,设置它,以及设置运行时元数据(例如CMD)。您可能可以在未流行的平台上使用一个未修改的文件,因为除了列出依赖项的文件(Node的package.json,Python的requirements.txt,...)之外,提及某些特定文件并不常见。

您还可以相当容易地手动构建Dockerfile。您的秘密武器是Docker层缓存:如果您重新运行docker build,并且直到当前行(包括当前行)都没有变化,则Docker将跳过它并使用上次构建的结果。您可以相当轻松地docker system prune消除在构建过程中创建的多余图像。因此,更多的增量过程可能看起来像:

  • 开始FROM适当的基础图像
  • 如果要运行某些命令,请添加RUN行并重新运行docker build;不要docker exec或尝试在适当位置进行修改
  • 如果发现明显错误,请修改RUN行并重新运行docker build
  • 如果以非显而易见的方式出错,请添加“调试printf”行RUN ls -lrt;或docker build会打印出12位数的十六进制图像ID,因此docker run --rm -it 0123456789ab /bin/sh使外壳在给定步骤的结果周围戳入]
  • 完成后,将生成的Dockerfile提交给源代码管理
  • 这可能与您已经完成的过程非常相似,除了不是将一系列命令docker exec写入Dockerfile并构建图像,而是将其写下来。


-1
投票

我不确定是否能得到确切的问题,但这里有一个基于现有node.js图像的打字稿示例的多阶段docker构建(构建本身已被docker化)+临时依赖阶段(更好的层清理)的示例。


推荐问答