Docker的postgres持久性和容器的生命周期

我是docker工人。 你可以看看我在这里的最后一个问题,看看我一直在问这个问题。 我仔细阅读了文档,并在网上阅读了几篇文章(这在Docker中的快速版本中是相当困难的),但是我仍然无法清楚地知道如何使用容器及其对持久性的影响。

官方postgres映像使用此命令在其Dockerfile中创build一个卷

VOLUME /var/lib/postgresql/data 

readme.md文件仅显示如何运行图像的一个示例

 docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres 

当我尝试的时候,我可以看到(用“docker检查some-postgres”)创build的卷存在于我的主机中的一个随机目录中,似乎“属于”那个特定的容器。

所以这里有一些问题可能有助于我的理解:

  1. 它看起来(从官方postgres图像文档),预期的用法是使用“docker运行”来创build容器,然后“docker启动”(这是我使用-d和–name推断的最后一点) 。 这对我来说是有道理的,但是与我见过的关于容器的很多信息的冲突应该是短暂的。 如果每次旋转一个新的容器,那么Doc​​kerfile中默认的VOLUMEconfiguration对于持久性不起作用。 什么是正确的做事方式?
  2. 鉴于上述是正确的(我可以运行一次,并开始多次),我看到在Dockerfile中的VOLUME命令的唯一原因是由于CoW文件系统绕过I / O性能。 这是正确的吗?
  3. 你能否清楚地解释一下使用这种方法比使用数据容器的方式(我认为是非正式的)推荐的方法? 我想知道我的具体情况,这是一个节点js内联网应用的优点/缺点。

谢谢,Awer

你是正确的,你可以使用'docker运行'启动容器,并在未来使用'docker启动'重新启动,假设你没有删除容器。 你也是正确的,docker集装箱应该是短暂的,如果集装箱消失,你不应该是坏的形状。 你可以做的是将一个卷装入docker容器到数据库的存储位置。

 docker run -v /postgres/storage:/container/postgres --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres 

如果您知道数据库在容器中写入的位置,则可以正确安装它,然后即使删除了postgres容器,当您开始备份时,您的所有数据仍将保留。 除非修改并保存容器,否则您可能还需要安装一些其他控制configuration的区域。