无法设置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 /data
, git add . && git commit -a -m "snapshot"
)和docker导出进行备份和传输。
看到这个相关的链接: