无法设置LVM时的快照选项

时间:2014-02-01 11:11:22

标签: containers snapshot docker lxc

我正在寻找方法让我可以轻松地封装我的“部署”,以便我可以拍摄允许的快照

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

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

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

1 个答案:

答案 0 :(得分:1)

我相信您正在寻找 data only container “最佳做法”。

您必须将数据和应用分离到2个容器。在实践中,你必须保存你的状态f.e. to / data仅在您的应用程序的文件系统中。这样,您可以随时提交数据容器(安装在/ 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

修改

您可以随时将app-data容器提交到新映像,但每次提交时此映像都基于busybox。

不幸的是,您无法通过docker commit提交app-data卷,也无法通过docker export导出(通过docker export)app-data卷(请参阅this)。

<强> EDIT2:

您可以通过将卷目录的tar从新容器管道传输到stdout来导出app-data容器(基本ubuntu映像没问题):

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目录的递增快照。它不记录已删除的文件,仅记录更改或新文件。您可以在运行备份之前删除/data/.tar.snap文件,随时进行完整备份。

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

请参阅此相关链接: