我有一个python烧瓶REST应用程序,它在部署时创建一个.db sqlite数据库文件。此应用程序现在部署在三节点docker swarm群集上。我使用swarm-stack文件在这些节点上部署容器。我的问题是现在每个容器都有自己的.db文件,即每个应用程序实例的单独数据库。我想要这个db文件的公共挂载点,以便每个服务都应该访问一个公共数据库。我该如何实现呢?我是码头工人的新手。
在整个节点/机器上共享文件不是Docker直接为您解决的问题,但您可以在shared storage systems的上下文中查看Docker存储驱动程序。这有助于它与NFS,ZFS等解决方案集成。
但是,您提到您正在使用SQLite和Flask,使用SQLAlchemy驱动程序。为了避免让您头疼,而不是尝试在三个节点之间共享文件系统,您应该使用数据库服务器,例如MySQL,MariaDB或PostgreSQL(仅举几例),所有这些都适用于SQLAlchemy。这样,您可以让所有Flask容器连接到同一个数据库容器,而不是尝试与Flask应用程序的所有正在运行的实例共享相同的SQLite文件(这将经常/快速锁定/降级)。
这个额外的数据库可以在容器中轻松运行,也可以由docker-compose
管理。这样,只有一个节点需要访问文件系统来存储数据库的数据。