在Docker和Flask中使用PostgreSQL数据库,它是如何工作的?

我刚刚开始使用Docker,并使用Python3,Flask,UWSGI和nginx创build了一个映像和运行容器。

现在我想在Flask中使用postgresql数据库。 我阅读以下页面,链接容器似乎对我来说是合乎逻辑的。 ( https://hub.docker.com/_/postgres/ )

我还有一些问题,或者Docker的原理对我来说不够清楚。 但是,如果我创build一个postgresql图像并运行容器,并将其链接到我的Flask应用程序,会发生什么情况如果:

  • 我重build图像或重新启动容器,我的数据库数据去哪里? 它消失了吗?
  • 我想在我的Flask(Docker)应用程序中使用我的数据库,我需要把我的configuration放到什么位置? (DATABASE_URI,NAME等)
  • 我想备份我的数据库,或在其中加载数据? 我可以连接到它吗?

正如你可能已经注意到,我显然是一个与Docker合作的初学者,也许我只是误解了原理。 真的很感激,如果有人能指引我正确的方向!

我重build图像或重新启动容器,我的数据库数据去哪里? 它消失了吗?

  • 不,数据没有消失。 数据被移除的唯一时间是如果您删除容器: docker rm <my postgres container> 。 唯一一次这是不正确的是,如果您将一个卷装入容器以显示数据卷: docker run -td -p 5432:5432 -v /mydata/volume:/var/lib/postgresql/data postgres:9.5.2

我想在我的Flask(Docker)应用程序中使用我的数据库,我需要把我的configuration放到什么位置? (DATABASE_URI,NAME等)

  • 这可能是一个辩论的主题,但我会使用您启动容器时设置的环境variables: docker run -td -p 80:5000 -e POSTGRES_URL=172.12.20.1 mycontainer/flask:latest在你的configuration,你会去os.getenv('POSTGRES_URL', 'localhost') 。 这允许你默认的本地主机,如果容器连接,否则你可以指向另一台机器上运行的另一个容器。 这样做更好,因为它可以在部署中提供更大的灵活性。

我想备份我的数据库,或在其中加载数据? 我可以连接到它吗?

  • 是的,就像使用在容器运行时指定的证书一样,您可以使用IP:PORT连接到Postgres。