什么是在docker中存储数据的最佳方法?

时间:2015-04-07 07:23:14

标签: svn docker volume

我在18.04.02安装了ubuntu服务器中的docker。并且有一个用于svn-server的容器。

我附加到svn-docker-container然后从origin svn-server同步。 (通过使用svn-sync)

在这种情况下,我担心可能会有数据丢失,如果主机pc不是属性关闭。数据会丢失吗? (更新了svn存储库。但主机pc已关闭。会发生什么?)

如果发生这种情况,防止数据丢失的最佳方法是什么? (例如,使用-v选项在主机目录和容器目录之间进行连接)

2 个答案:

答案 0 :(得分:0)

根据我的理解,任何应该保留的数据存储都应该通过使用卷来实现。如果将所有应存储的数据写入卷,则该数据将存储在hosts文件系统中。

我理解你的问题的方式,你有一个svn-server-container和一个svn-container,你担心当svn-server-container异常关闭时会发生什么。 因此,我建议您至少使用服务器的卷,以便即使服务器容器关闭,服务器数据也会存储在主机上。即使您只使用docker stop关闭服务器容器,如果您不使用卷,也不会存储数据。

此外,您可能希望为svn-container使用卷,因此每次重新启动svn-container时都不必总是从服务器中提取整个svn目录。

当然,如果相应的进程异常终止,您的数据可能会被破坏,因为可能仍有一些写操作正在进行,然后被中断。但假设所有的写操作都已完成,并且SVN本身并不介意只是关闭,那么这可能会正常工作。

答案 1 :(得分:0)

我已经对“投票”进行了一些评论。这个问题;我想(虽然我只是在观看" Minnions &#34之后选择 Docker-ezze ;它就像不透明一样更有趣,不透明。

好吧,这是一种愚蠢的理解; Docker容器 是Docker规范的运行时实例 。 Docker存储库中存在(或可能)该规范的二进制映像 - 如果您已经 保存了一个'

我们的Docker容器类似于启动 autoexec 脚本,用于特定系统和特定配置以及特定数据(内容)。这对于重复运行静态内容(如小型网站,评估服务器或软件包,可重复的测试运行等)非常重要。(例如)。

对我来说,第一个用例(我可能)表明人们是一个"测试数据库"。每当你

 docker run test-database-server

/ Any连接字符串指向运行的Docker镜像的应用程序是一个充满了我的应用程序的已知测试数据的数据库服务器。我可以更新容器中的数据 - 一旦test-database-server终止,这些更新将不会持久存在。它就像一个数据库重置。非常适合测试。

如果我希望我的测试数据库服务器指向不同的数据内容 - Ergo,我可能有两个或三个不同的测试数据集 - 我可以将数据放在不同的Docker容器中,我可以 从我的test-database-server

中使用
   docker run test-database-server -volumes-from=test-data-container

我的test-data-container甚至可以指向或使用"真实"我的系统上的磁盘通过-volume=...选项。因此,test-data-container的日期可以设置为持久作为容器外的 实际数据库。据我所知," 里面"容器可以持久化,就像预先初始化的RAM一样。它可以更改,并在图像停止时重置。

链接