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

时间:2016-02-10 22:32:19

标签: postgresql docker dockerfile

我是码头工人的新手。你可以看一下我在这里的最后一个问题,看看我一直在问这个问题。我仔细阅读了这些文档,并在网上阅读了几篇文章(鉴于在docker中快速版本化,这很难),但我仍然无法清楚地了解我应该如何使用容器及其影响坚持不懈。

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

VOLUME /var/lib/postgresql/data

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

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

当我尝试这个时,我可以看到(使用" docker检查一些postgres")创建的卷存放在我的主机的随机目录中,它似乎属于"属于#34 ;到那个特定的容器。

所以这里有一些问题可以帮助我理解:

  1. 看起来(来自官方的postgres图像文档)预期用法是使用" docker run"创建容器," docker start"之后(最后一点我从使用-d和--name的事实推断)。这对我来说很有意义,但与我在容器上看到的大量信息的冲突应该是短暂的。如果每次都旋转一个新容器,那么Doc​​kerfile中的默认VOLUME配置对于持久性不起作用。什么是正确的做事方式?
  2. 鉴于以上是正确的(我可以运行一次并多次启动),我在Dockerfile中看到VOLUME命令的唯一原因是I / O性能,因为CoW文件系统旁路。这是对的吗?
  3. 您能否清楚地解释一下使用这种方法在(我认为是非正式的)推荐使用数据容器的方式上有什么问题?我想知道我的具体情况的优缺点,这是一个节点js内联网应用程序。
  4. 谢谢, AWER

1 个答案:

答案 0 :(得分:0)

你是正确的,你可以使用'docker run'启动容器,并在将来使用'docker start'再次启动它,假设你没有删除容器。你也是正确的,Docker容器应该是短暂的,如果容器消失,你的形状不应该是坏的。您可以做的是将一个卷安装到docker容器中,直到数据库的存储位置。

if form.is_valid():
            instance = form.save(commit=False)
            Stand = form.cleaned_data['Stand']
            print(Stand)
            Stand_db = Daten.objects.latest('Stand')
            print(Stand_db)
            Verbrauch = (Stand - Stand_db)
            print(Verbrauch)
            instance.save()

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