如何构建一个“不断发展的”泊坞窗映像

时间:2019-08-16 10:22:02

标签: docker dockerfile

我有一个docker容器,其中包含一个批处理,该批处理进行一些计算并将结果存储在容器内的/data中。每当启动应用程序时,它都需要从/data

中的最后一个存储状态继续进行计算

出于某种原因,我无法制作/data某种卷或外部存储,但是它必须位于容器内部。

为了不必多次进行计算,我尝试在每次运行批处理后根据/data的实际状态创建一个新图像。

/data很大,并且包含许多文件,但是在执行一批处理后,该目录上的更改很小。所以我想达到这样的层堆栈:

Update run +...                                     (some MB)
Update run +2                                       (some MB)
Update run +1                                       (some MB)
First update run                                    (some MB)
Initial run                                         (several GB)
Base layer containing application and empty `/data` (some 100 MB for initial stack)

初始运行层将非常大,因为它包含了从头开始的所有结果。更新运行只在/data

中包含一小组更改的数据

我尝试了以下操作:

  • 启动基本容器(空/data
  • 批处理运行到某些临时映像后的提交状态
  • 进行如下所示的多阶段构建
FROM temporary_image as actual_state
FROM prepared_batch

COPY --from=actual_state /data /data
  • 基于prepared_batch
  • 开始下一次迭代
  • 批处理运行到某些临时映像后的提交状态
  • 再次进行多阶段构建
  • ...

作为结果的层堆栈,我得到以下内容

Update run +...                                     (several GB)
Update run +2                                       (several GB)
Update run +1                                       (several GB)
First update run                                    (several GB)
Initial run                                         (several GB)
Base layer containing application and empty `/data` (some 100 MB for initial stack)

因此,我对层规范化工作原理的理解似乎不正确。什么是实现目标层结构的正确方法?可能吗?

0 个答案:

没有答案