我正在寻找方法让我可以轻松地封装我的“部署”,以便我可以拍摄允许的快照
我主要使用VPS提供程序(Xen / KVM),我无法控制在文件系统上设置LVM。目前我正在使用Docker(环绕LXC)以便快速轻松地部署我的应用程序,但我通常将“状态”信息挂载到VM文件系统而不是容器内。这样,如果服务器崩溃/重新启动,我不会丢失任何东西。然后,每当我想移动时,我都必须手动获取/打包这些信息,并且没有时间点恢复的选项,例如LVM。
将状态移动到容器中是很诱人的,这样我就可以在时间点“提交”容器,然后我可以通过简单地保存/传输/加载容器来移动主机。这也允许通过在提交生成的图像上使用docker run
来恢复到某个时间点,但这有点危险,感觉就像“糟糕的做法”。我被告知不要让我的容器“有自己的生命”。有没有人知道替代方案,例如虚拟文件系统,或者将状态留在docker容器内的“安全”方式。
答案 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 /data
,git add . && git commit -a -m "snapshot"
)和docker导出备份和传输。
请参阅此相关链接: