1

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

  • 主机间传输
  • 恢复到前一个时间点的能力(快照)

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

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

4

1 回答 1

1

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

您必须将数据和应用程序解耦到 2 个容器。在实践中,您必须将状态 fe 保存到 /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 提交应用数据卷,也无法通过 docker export 导出(通过 docker export)应用数据卷(请参阅this)。

编辑2:

您可以通过将卷目录的 tar 从新容器传输到标准输出来导出 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 export 进行备份和传输。

请参阅此相关链接:

于 2014-02-02T09:11:53.503 回答