部署寒假里工作室的成果,二維碼掃碼登陸就暫停了,遇到了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改變的話,會出現報錯信息
所以網上很多就直接推薦的方式是掛載文件所在的目錄