生产环境下使用Docker容器的行为

3

我目前正在学习Docker。据我所知,基于镜像的容器只保存更改的内容。如果我在生产环境中使用它,当运行在容器“内部”的应用程序将更改写入磁盘时,它会自动持久化吗?还是需要手动操作?

我的担忧是 - 如果主机突然关闭,那么所有更改都会丢失吗?

1个回答

4
理论上,在大多数情况下,Docker容器和传统虚拟机或物理主机之间没有真正的区别。
如果主机突然死机,使用容器和使用物理主机一样会丢失最近的数据:
- 您的应用程序可能没有决定真正将写操作发送到磁盘以保存数据, - 操作系统可能决定等待一段时间再将数据发送到存储设备, - 文件系统可能没有完成写操作, - 数据可能没有真正刷新到物理存储设备。
现在,默认情况下,Docker使用AUFS(可堆叠文件系统),它在文件级别工作。
如果您要写入Docker镜像中已经存在的文件,AUFS将首先将此基本文件复制到上层可写层(容器)中,然后再写入您的更改。这会导致延迟,具体取决于原始文件的大小。 有趣的技术信息和更多信息在此处
我猜想,如果在复制此原始文件并且在您的更改被写入之前发生停电,那么这将是使用Docker容器比任何“传统”主机更容易出现数据丢失的原因之一。
您可以将关键数据移动到Docker“卷”中,该卷是主机上的常规文件系统,绑定到容器中。这是处理希望跨容器部署保留重要数据的推荐方法。
为了减轻AUFS潜在问题,您可以告诉Docker使用LVM薄配置块设备而不是AUFS(清除/var/lib/docker并使用docker -d -s devicemapper启动守护程序)。但是,我不知道这种存储后端是否像默认的AUFS一样经过了多次测试(尽管对我来说它运行良好)。

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