首页 > 解决方案 > 如何为在三节点 docker-swarm 集群上运行的 python 烧瓶应用程序挂载一个通用的 sqlite 数据库文件?

问题描述

我有一个 python flask REST 应用程序,它在部署时会创建一个 .db sqlite 数据库文件。这个应用程序现在部署在三个节点的 docker swarm 集群上。我使用 swarm-stack 文件在这些节点上部署容器。我的问题是现在每个容器都有自己的 .db 文件,即应用程序的每个实例都有一个单独的数据库。我想要这个 db 文件的公共挂载点,以便每个服务都应该访问一个公共数据库。我该如何实施?我是码头工人的新手。

标签: dockerflaskdocker-composeflask-sqlalchemydocker-swarm

解决方案


跨整个节点/机器共享文件不是 Docker 会直接为您解决的问题,但是您可以在共享存储系统的上下文中查看 Docker 存储驱动程序。这有助于它与 NFS、ZFS 等解决方案集成。

但是,您提到您正在使用 SQLite 和 Flask,使用 SQLAlchemy 驱动程序。为避免让您头疼,与其尝试在三个节点之间共享文件系统,不如使用数据库服务器,例如MySQLMariaDBPostgreSQL(仅举几例),所有这些都可以与 SQLAlchemy 很好地配合使用。这样,您可以让所有 Flask 容器连接到同一个数据库容器,而不是尝试与 Flask 应用程序的所有正在运行的实例共享同一个 SQLite 文件(这将非常频繁/快速地锁定/降级)。

这个额外的数据库可以在容器中轻松运行,也可以由docker-compose. 这样,只有一个节点需要访问文件系统来为数据库存储数据。


推荐阅读