Docker副本写与大文件

时间:2016-10-12 10:42:58

标签: docker

我们正在使用具有大文件(数据库)的docker,我们希望将这些文件存储为图像的一部分。 问题是文件更改时我们想要提交对图像的更改。通常只有部分文件发生变化,我们希望docker只保存差异。

只要我们不提交更改,

写入时复制似乎可以在块级别上运行。 当我们执行docker commit时,commit的大小是要更改的文件大小的总和。

我们正在使用:

存储驱动程序:devicemapper

池名称:docker-thinpool

图书馆版:1.02.107-RHEL7(2016-06-09)

是否存在能够在块级别上保存(泊坞窗提交)更改的存储驱动程序,换句话说,如果只有一小部分更改,则不会保存整个文件?

2 个答案:

答案 0 :(得分:0)

device mapper存储驱动程序在块级别工作,应该完全符合您的要求:

  

更新现有数据使用写时复制操作。由于Device Mapper是基于块的技术,因此这些操作发生在块级别。例如,对容器中的大文件进行少量更改时,devicemapper存储驱动程序不会复制整个文件。它只复制要修改的块。每个块为64KB。

如果您正在使用商业支持的Docker引擎,Error Code: SignatureDoesNotMatch是RHEL和CentOS在compatibility matrix中支持的驱动程序,但后端位于主线内核中,因此它应该运行在其他发行版上。

答案 1 :(得分:-1)

原始数据库文件实际上不应该在COW层上,也不应该提交给图像。

这种数据实际上是音量系统的设计目标。使用普通数据库进程填充数据并进行备份。图像应包含数据库软件,卷应包含状态。