无法设置LVM时的快照选项

我正在寻找一些方法来简化封装我的“部署”的方式,使我可以拍摄快照

  • 主机之间的转移
  • 能够恢复到以前的时间点(快照)

我主要使用VPS提供程序(Xen / KVM),我无法控制在文件系统上设置LVM。 目前我正在使用Docker(环绕LXC)来快速轻松地部署我的应用程序,但是我通常将“状态”信息挂载到虚拟机文件系统而不是容器中。 这样,如果服务器崩溃/重新启动,我不会失去任何东西。 然后,只要我想移动,就必须手动抓取/打包这些信息,并且没有时间点恢复的选项,比如使用LVM。

将状态移动到容器中是很诱人的,这样我就可以在时间点“提交”容器,然后我可以通过简单的保存/传送/加载容器来移动主机。 这也允许通过使用docker run在从提交生成的图像上恢复到某个时间点,然而这有点危险,感觉像是“不好的做法”。 我被告知不要让我的容器“有自己的生命”。 有没有人知道替代品,比如虚拟文件系统,或者是一种“安全”的方式,将状态留在docker集装箱内。

我相信你正在寻找数据只容器 “最佳实践”。

您必须将您的数据和应用程序分离到2个容器。 实际上,只有在应用程序的文件系统中才能将状态保存到/数据。 这样,您可以随时提交数据容器(安装在/ data),完全独立于应用程序容器/图像。

 # create data volume "app-data" sudo docker run -name app-data -v /data busybox true # container exits immediately, it does not matter sudo docker run --volumes-from app-data your-image 

编辑:

您可以随时将应用程序数据容器提交到新映像,但是每次提交时,此映像都基于busybox。

不幸的是,你不能通过docker commit来提交应用程序数据量,你不能通过docker export导出(通过docker export)app-data卷(见这个 )。

EDIT2:

您可以通过从新容器中将卷目录的tarpipe道输出到标准输出(base ubuntu image is ok)来导出应用程序数据容器:

 sudo docker run --volumes-from app-data ubuntu tar -cO /data/ | gzip -c > snapshot.tgz 

如果要进行增量备份(以节省一些空间),则可以使用tar来仅增量备份更改:

 sudo docker run --volumes-from app-data ubuntu tar -cO /data/ -g /data/.tar.snar --exclude .tar.snar| gzip -c > snapshot-`date -u "+%F-%T"`.tgz 

这将使/ data目录的增量快照成为可能。 它不logging已删除的文件,只更改或logging新文件。 您可以在运行备份之前通过删除/data/.tar.snap文件随时进行完整备份。

我不知道你的数据/状态如何结构,但在文本configuration文件的情况下,我会使用git快照和版本的/ data目录(内容器: git init /datagit add . && git commit -a -m "snapshot" )和docker导出进行备份和传输。

看到这个相关的链接: