Docker临时文件策略

时间:2017-03-15 16:53:02

标签: docker

我的码头工人会生成一些临时文件。

是否有鼓励策略?

如果我将这些内容放到/tmpI'm not sure,他们就会被清除。

或者我应该从主机公开卷/tmp吗?

由于

1 个答案:

答案 0 :(得分:23)

我不知道有什么鼓励使用Docker管理临时文件的方法,因为这主要取决于您如何使用应用程序处理这些临时文件(是否应在重新启动时将其删除?定期删除?...)

根据需要,您有几种可能:

使用Docker tmpfs mount

您可以安装一个tmpfs卷,该卷将在容器运行时持久保留数据(即,当容器停止时该卷中的数据将被删除),例如:

docker run --mount type=tmpfs,destination=/myapp/tmpdir someimage

如果您可以定期重新启动容器,并且在重新启动容器时可以重新创建临时数据,则这可能很有用。但是,如果您需要在容器运行时清理临时数据,则这不是一个好的解决方案,因为您将需要停止容器以清理临时数据。

编辑:根据@ alexander-azarov注释,默认情况下,tmpfs卷大小不受限制,存在容器耗尽所有机器内存的风险。建议使用tmpfs-size标志来减轻这种风险,例如docker run --mount type=tmpfs,destination=/app,tmpfs-size=4096

写到container writable layer

如果未安装卷,则所有可写数据都将写入容器的可写层。它在重新启动容器时将保持不变,但是如果删除了容器,它将被删除。

这样,仅当删除容器时,才会删除临时数据。对于短寿命的容器,这可能是一个很好的解决方案,但对于长寿命的容器却不是。

使用bind mount在容器中安装主机/tmp

例如:

docker run -v /tmp:/myapp/tmpdir someimage

这将导致所有数据都写入主机/tmp目录中,结果取决于主机如何管理/tmp(在大多数情况下,数据会在计算机重新启动后清除)< / p>

Create and mount a volume将数据管理到其中

您可以创建一个包含数据的卷,例如:

docker run --mount source=myappvol,target=/myapp/tmpdir someimage

并管理卷中的数据:将其安装在另一个容器中并清理数据,删除卷等。


这些是最常见的解决方案,(几乎)完全依赖Docker功能。另一种可能性是直接从容器中运行的软件或应用程序处理临时文件,但这比与Docker相关的问题更多是与应用程序相关的问题。