部署寒假里工作室的成果,二维码扫码登陆就暂停了,遇到了Docker对SQlite数据库的操作
一开始写Demo都是用的Mysql,后来发现了SQlite,就开始变懒了.....
(虽然SQlite无需配置,用起来方便,但是真正的生产中还是要选择合适数据库进行储存数据)
现在喜欢上了用Docker,而关于Docker中如何配置SQlite的文章似乎很少
(只有像我这种练手的采用这种数据库吧.....)
关于SQLite配置
在Dockerflie文件中,一开始采取的方式是一种很笨的方法
没有相关的SQlite配置说明(或者是我没找到)
就直接在文件中COPY过去,或者在Dockerfile中加入生成数据库文件的命令
COPY data.sqlite /app/
RUN python manage.py createdb
如果直接进行COPY的话,会出现权限问题
导致镜像中sqlite文件不能被写入
在Dockerfile文件中加入chmod
RUN chmod 644 data.sqlite
关于SQlite挂载,备份
今天在部署的时候想到,这种文件储存数据的形式
等部署成功并且运行一段时间后,数据库的文件如何进行备份呢?
一种则是从docker中cp出来数据库文件带宿主机
docker cp 容器name:容器中文件路径 宿主机地址
docker cp container /app/data/data.sqlite /home/bay1/data
另一种则是数据卷的形式
将sqlite文件挂在到宿主机,进行实时共享和保存
挑一个docker-compose文件的例子
version: '2'
services:
vue:
build: .
volumes:
- /home/wwwroot/vue/data:/vue/data
ports:
- 8004:5000
其中sqlite文件保存的目录是data,volumes指定相应的宿主机和容器路径
(宿主机要为绝对路径)
数据卷的形式是可以直接挂载文件的,而不同于上述的目录
但是似乎只能通过命令行进行设定
(原链接)
docker run -it -v 宿主机文件路径:挂载到文件路径 镜像名 /bin/bash
需要注意的是如果文件的inode改变的话,会出现报错信息
所以网上很多就直接推荐的方式是挂载文件所在的目录