有没有办法“应用补丁”到一个docker镜像?

7
有没有一种方法可以“应用补丁”到docker镜像,特别是其中一个或多个RUN、ADD等命令?
例如,一个RUN命令可能需要20分钟才能运行,它下载、编译和安装二进制文件。是否有可能对其进行差异化比较并将其应用于另一个镜像?
我想到的唯一方法(我还没有尝试过)是运行docker diff,解析输出,创建tgz,然后在另一个Dockerfile中使用tgz作为ADD。
我知道这样做会有问题,例如如果之前调用了apt-get update,可能会破坏二进制文件的预期动态库链接等。我没关系,因为我的测试将失败,并显示我必须重新构建“diff”。
我也意识到可能会存在冲突。我很高兴完全替换该文件。
这个功能的原因是为了节省时间。例如,有时早期的Dockerfile命令需要更改,这将破坏缓存。此外,尽管我尝试使它们相同以利用缓存,但在两个不同的Dockerfiles中,前面的命令不总是相同的。
2个回答

2
简单回答是不行的。
详细回答是,如果你有足够的动力,你可能能够编写代码来实现你想要的功能。我在这里写了一些关于Docker镜像格式的文档(以及一个用于操作这些镜像的工具)。 这可能会给你一些开始的想法。就个人而言,我认为这样的努力不值得。

1

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

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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接