Docker复制写入大文件

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

只要我们不提交更改,复制写入似乎在块级别上工作。 当我们执行Docker提交时,提交的大小是被更改的文件大小的总和。

我们正在使用:

存储驱动程序 :devicemapper

池名称 :docker-thinpool

资料库版本 :1.02.107-RHEL7(2016-06-09)

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

原始数据库文件不应该在COW层上,也不应该被委托给图像。

这种数据真的是音量系统的devise目的。 使用正常的数据库进程填充数据并进行备份。 图像应该包含数据库软件,并且卷应该包含状态。

设备映射程序存储驱动程序在块级别上工作,应该按照您的要求进行:

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

如果您使用的是商业支持的Docker引擎, devicemapper是兼容性matrix中 RHEL和CentOS支持的驱动程序,但是后端位于mainline内核中,因此它应该在其他发行版上运行。