Как смонтировать общий файл базы данных sqlite для приложения фляги python, работающего на кластере docker-swarm из трех узлов? - PullRequest
0 голосов
/ 31 марта 2019

У меня есть REST-приложение для флакона Python, которое при развертывании создает файл базы данных .db sqlite. Это приложение теперь развернуто на кластере Docker Swarm с тремя узлами. Я использую файл стека роя, чтобы развернуть контейнер на этих узлах. Моя проблема в том, что теперь каждый контейнер имеет свой собственный файл .db, т.е. отдельную базу данных для каждого экземпляра приложения. Мне нужна общая точка монтирования для этого файла базы данных, чтобы каждый сервис имел доступ к общей базе данных. Как я могу это реализовать? Я новичок в докере.

1 Ответ

0 голосов
/ 31 марта 2019

Совместное использование файлов на целых узлах / машинах - это не то, что Docker решит для вас напрямую, но вы можете взглянуть на драйверы хранилища Docker в контексте общих систем хранения . Это помогает интегрироваться с такими решениями, как NFS, ZFS и т. Д.

Однако вы упомянули, что вы используете SQLite и Flask, используя драйвер SQLAlchemy. Чтобы избавить вас от головной боли, вместо того, чтобы пытаться разделить файловую систему между вашими тремя узлами, вы должны использовать сервер баз данных, такой как MySQL , MariaDB или PostgreSQL (чтобы назвать несколько), все это хорошо работает с SQLAlchemy. Таким образом, вместо того, чтобы пытаться использовать один и тот же файл SQLite для всех запущенных экземпляров вашего приложения Flask (которое будет блокировать / ухудшать очень часто / быстро), вы можете подключить все свои контейнеры Flask к одному и тому же контейнеру базы данных.

Эту дополнительную базу данных можно легко запустить в контейнере, а также управлять docker-compose. Таким образом, только один узел нуждается в доступе к файловой системе для хранения данных для базы данных.

...