Docker临时文件策略

Docker临时文件策略,docker,Docker,我的docker生成一些临时文件 关于这些,是否有鼓励的策略 如果我把它们放到/tmp,它们就会被清除 或者我应该从主机公开卷/tmp 谢谢我不知道使用Docker管理临时文件有什么值得鼓励的方法,因为这主要取决于您需要如何使用应用程序处理这些临时文件(是否应在重新启动时删除?定期?…) 根据您的需要,您有几种可能性: 使用Docker 您可以装载tmpfs卷,该卷将在容器运行期间保持数据(即,当容器停止时,卷中的数据将被删除),例如: docker run --mount type=tmpfs

我的docker生成一些临时文件

关于这些,是否有鼓励的策略

如果我把它们放到
/tmp
,它们就会被清除

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


谢谢

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

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

使用Docker 您可以装载
tmpfs
卷,该卷将在容器运行期间保持数据(即,当容器停止时,卷中的数据将被删除),例如:

docker run --mount type=tmpfs,destination=/myapp/tmpdir someimage
docker run -v /tmp/myapp-tmp-dir:/myapp/tmpdir someimage
docker run --mount source=myappvol,target=/myapp/tmpdir someimage
如果您(可以)定期重新启动容器,并且可以在容器重新启动时重新创建临时数据,这可能会很有用。但是,如果您需要能够在容器运行时清理临时数据,这不是一个好的解决方案,因为您需要停止容器以清理临时数据

编辑:根据@alexander azarov coment,默认情况下tmpfs卷大小是无限的,存在容器耗尽所有机器内存的风险。建议使用标志来降低该风险,例如
docker run--mount type=tmpfs,destination=/app,tmpfs size=4096

写进 容器的可写层是在没有装入卷的情况下将所有数据写入容器的层。它将在容器重新启动时保持,但如果容器被删除,它将被删除

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

将主机
/tmp
安装在带有 例如:

docker run --mount type=tmpfs,destination=/myapp/tmpdir someimage
docker run -v /tmp/myapp-tmp-dir:/myapp/tmpdir someimage
docker run --mount source=myappvol,target=/myapp/tmpdir someimage
这将导致所有数据写入主机
/tmp/myapp tmp dir
目录,结果将取决于主机如何管理
/tmp
(在大多数情况下,数据在机器重新启动时被清除)

将数据管理到 您可以创建包含数据的卷,例如:

docker run --mount type=tmpfs,destination=/myapp/tmpdir someimage
docker run -v /tmp/myapp-tmp-dir:/myapp/tmpdir someimage
docker run --mount source=myappvol,target=/myapp/tmpdir someimage
并管理卷中的数据:将其装载到另一个容器中并清理数据、删除卷等



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

你的集装箱真的会运行很长时间吗?它们不会被清理,因为容器中没有cron(除非您显式地设置它)。是的,它们是Web服务器,预期将长期运行。所以我想目前还没有现成的最佳实践,对吧?谢谢你,我个人觉得你的答案很全面。我认为唯一值得一提的一点是:由于
tmpfs
mount驻留在内存中,因此可能存在耗尽所有主机内存的风险。很好的一点是,可以使用
tmpfs size
标志来限制分配的大小。我将进行相应的编辑,感谢您的反馈关于如何安装到
/tmp/myapp:/myapp/tmpdir
而不是
/tmp:/myapp/tmpdir
?容器将无法再访问主机的临时文件。