生产中使用时的Docker容器行为

时间:2014-06-19 03:33:27

标签: docker

我正在阅读Docker。根据我的理解,基于图像的容器仅保存更改。如果我在生产设置中使用它,一旦在容器内“运行”的应用程序将更改写入磁盘,它是否会持续存在,还是必须手动完成?

我担心的是 - 如果主持人突然关闭怎么办?所有的变化都会丢失吗?

1 个答案:

答案 0 :(得分:4)

理论上说,在大多数情况下,Docker容器与经典VM或物理主机之间没有真正的区别。

如果主机突然死亡,您可以使用容器以及使用物理主机来丢失最近的数据:

  • 您的应用程序可能没有决定真正发送写操作以将数据保存在磁盘上,

  • 在将数据发送到存储设备之前,操作系统可能已经决定等待一段时间

  • 文件系统可能没有完成写入

  • 数据可能尚未真正刷新到物理存储设备。

现在默认情况下,Docker使用AUFS(可堆叠文件系统),它在文件级别工作。

如果您正在写入Docker镜像中存在的文件,AUFS将首先将此基本文件复制到较高的可写层(容器),然后再编写更改。这会导致延迟,具体取决于原始文件的大小。 Interesting and more technical information here

我想如果在复制原始文件时以及在编写更改之前发生断电,那么这将是使用Docker容器比使用任何“经典”主机更多数据丢失的原因之一。

您可以将关键数据移动到Docker "volume",这将是主机上的常规文件系统,绑定安装到容器中。这是处理要在容器部署中保留的重要数据的推荐方法

为了缓解AUFS潜在问题,您可以告诉Docker使用LVM精简配置块设备而不是AUFS(擦除/var/lib/docker并使用docker -d -s devicemapper启动守护程序)。但是我不知道这个存储后端是否收到了与默认AUFS一样多的测试(虽然它对我来说没问题)。