我不知道是否可以从现有的专用存储库创建DockerFile。我创建了一个容器并安装了配置好的服务器(我不记得所有命令了),所以现在我希望将其与我的GitHub帐户同步,因此每当我推送分支时,它也会更新映像中的更改。对于自动构建,它表示我需要一个DockerFile,但我从未创建过一个。是否可以从现有映像/容器自动创建dockerfile。使用docker history命令无济于事,因为我使用docker exec进行了服务器配置。可能吗?
提前感谢。
您需要重新开始。 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
RUN ls -lrt
;或docker build
会打印出12位数的十六进制图像ID,因此docker run --rm -it 0123456789ab /bin/sh
使外壳在给定步骤的结果周围戳入]Dockerfile
提交给源代码管理这可能与您已经完成的过程非常相似,除了不是将一系列命令docker exec
写入Dockerfile
并构建图像,而是将其写下来。
我不确定是否能得到确切的问题,但这里有一个基于现有node.js图像的打字稿示例的多阶段docker构建(构建本身已被docker化)+临时依赖阶段(更好的层清理)的示例。