我相信您正在寻找仅数据容器“最佳实践”。
您必须将数据和应用程序解耦到 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 /data
,git add . && git commit -a -m "snapshot"
)的版本控制,并使用 docker export 进行备份和传输。
请参阅此相关链接: