有没有办法将“补丁”应用到泊坞窗图像?

时间:2015-03-05 01:29:36

标签: docker diff patch

有没有办法#34;应用补丁"到泊坞窗图片,特别是一个或多个RUNADD等命令?

例如,RUN命令可能需要20分钟才能运行,下载,编译和安装二进制文件。是否有可能采取差异并将其应用于另一个图像?

我能想到的唯一方法(我还没有尝试)是运行docker diff,解析输出,创建一个tgz,然后将tgz用作ADD in另一个Dockerfile

我知道这有问题,例如如果预先调用apt-get update可能会破坏二进制文件的预期动态库链接等等,我可以使用它,因为我的测试会失败,并且会显示我必须重建&#34 ; DIFF"试。

我也意识到可能会有冲突。我很乐意完全替换该文件。

此功能的原因是为了节省时间。例如,有时需要更改早期Dockerfile命令,并且会破坏缓存。此外,尽管我尝试使它们相同以利用缓存,但两个不同的Dockerfiles中的前面命令并不总是相同。

2 个答案:

答案 0 :(得分:2)

简短的回答是,不,你不能这样做。

长期的答案是,如果有足够的动力,您可以编写能够满足您需求的代码。我在这里写了一些关于docker图像格式的文档(以及一个用于处理这些图像的工具):

这可能会给你一些关于从哪里开始的想法。

就个人而言,我怀疑这种努力是不值得的。

答案 1 :(得分:0)

我发现我们可以使用不同的方法来应用补丁或更新。

1.Patching using the Dockerfile
2.Patching an instance of the container and converting it to an image

我按照第二个程序应用任何补丁。这有助于我在构建或推送回购之前测试和更新我的图像。

 1. Create a container from the image you would like to update.
 2. Inside the container, run the native package manager and update the  desired packages or patches.
 3. Exit the container instance.
 4. Commit the changes done to get the updated image.
 5. Stop the containers that were instantiated from the pre-updated image.
 6. Instantiate new containers from the update image.