postgreSQL的官方docker镜像如何以及在何处持久保存其数据库

时间:2016-06-23 11:15:37

标签: postgresql docker persistence docker-compose

我是docker的新手并且有些困惑,因为我期待我的PostgreSQL docker容器无法保留任何数据,但是当我停止它后将其重新启动时,我的数据库数据似乎仍然存在。

我一直在寻找现有的答案,并在堆栈交换中找到以下内容:
(对不起,我没有代表发布超过2个链接)

  • Docker postgres persistance和container lifetime
  • 如何在Docker Postgres的脚本中创建用户/数据库
  • 如何处理docker中的持久存储(例如数据库)

但我仍然不明白。也许有人可以为我更明显地拼出来!这就是我所做的:

(我使用的docker撰写和构建文件显示在本文的底部)
我按照Docker文档站点的教程进行了操作:
Quickstart: Docker Compose and Django
这一切都完美无缺,所以我继续关注Django app教程:
Writing your first Django app
一切都很好,所以我在我的新网站上玩了一会儿,导致数据库填充了一些数据。

我可以看到我的示例Django应用程序的Web应用程序代码如何粘贴在我的主机上的卷上,并且还复制到我再次运行docker-compose时生成的图像但我预期停止所有容器后,存储在postgres数据库容器中的任何数据都将丢失。但是在停止所有正在运行的容器后,我又回到了docker项目目录并运行:

docker-compose up

这一切都直接回来了,我之前运行的图像中的数据仍然存在于数据库中,并在我的Django Web应用程序中使用。

那是怎么回事?

  1. 数据库存储数据的位置在哪里?
    • 主持人的某个地方?
    • 我怎样才能找到它的位置?
  2. postgres容器如何管理跨单独运行的数据?
    • 构建文件的哪一部分会发生这种情况?
    • 或者这是官方postgres图像的某种默认行为吗?
  3. 以下是我按照上面引用的docker快速入门教程的指示使用的构建文件。

    Dockerfile

    FROM python:2.7
    ENV PYTHONUNBUFFERED 1
    RUN mkdir /code
    WORKDIR /code
    ADD requirements.txt /code/
    RUN pip install -r requirements.txt
    ADD . /code/
    


    requirements.txt

    Django
    psycopg2
    


    搬运工-compose.yml

    version: '2'
    services:
      db:
        image: postgres
      web:
        build: .
        command: python manage.py runserver 0.0.0.0:8000
        volumes:
          - .:/code
        ports:
          - "8000:8000"
        depends_on:
          - db
    

1 个答案:

答案 0 :(得分:1)

它存储在docker容器中。当您停止时,容器仍会保留其所有数据。只有在删除数据时才会丢失数据:

docker rm <container>