有什么办法可以“应用补丁”到 docker 镜像?

gak*_*gak 5 diff patch docker

有什么办法来“打补丁”,以码头工人的形象,特别是一个或多个RUNADD等命令?

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

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

我知道这存在一些问题,例如,如果apt-get update事先调用an可能会破坏二进制文件的预期动态库链接等。我对此没有意见,因为我的测试将失败,并将表明我必须重建再次“差异”。

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

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

lar*_*sks 2

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

长的答案是,只要有足够的动力,您也许能够编写出您想要的代码。我在这里编写了一些有关 docker 映像格式(以及用于操作这些映像的工具)的文档:

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

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