我有一个docker容器,其中包含一个批处理进程,它执行一些计算并将结果存储在
/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)
初始运行层将非常大,因为它包含从一开始的所有结果。更新运行只包含一小部分内部更改的数据
/数据
我尝试了以下方法:
-
启动基本容器(空
/数据
)
-
批处理运行后提交状态到某个临时映像
-
做一个像这样的多级构建
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)
所以我对层规范化工作原理的理解似乎是不对的。实现目标层结构的正确方法是什么?有可能吗?