Docker 持久化 SQLite 数据库文件
使用 docker container 部署运行 Flask web app,默认是不会持久化数据的。 如果 web app 用到 SQLite 数据库, 那么当 docker container 在运行的时候, SQLite 数据库是得到正确更新的, 问题是一旦终止 docker container 的运行, SQLite 数据库中原先的更新都消失了。这显然不可接受。
如何持久化 SQLite 数据库文件中的数据呢? 答案是 docker volume。
具体步骤
首先,使用 “docker volume create myapp-db” 命令创建一个叫做 myapp-db 的 volume。 这个 volume 在 /var/lib/docker/volumes 下面。 可以使用 docker volume inspect myapp-db 查看细节。注意:这时,这个 volume 与 Flask web app 没有任何关系。 下一步在运行 docker container 时与之建立关系。
[
{
"CreatedAt": "2023-07-17T07:38:17+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/myapp-db/_data",
"Name": "myapp-db",
"Options": {},
"Scope": "local"
}
]
在 sudo docker run 后面附加下面的参数 “--mount type=volume,src=myapp-db,target=/app”。 src=myapp-db 指定 volume 的名称, 我们想把这个位于主机(host)的 volume 挂载到 docker container 某个路径下面去,进而实现数据互通。 target=/app 指定目标挂载位置, /app 是对于 docker container 而言的路径, 不是主机的路径。以这种方式运行 docker container,就能持久化 SQLite 数据库文件。
关键要搞清 src 是啥, target 是啥。 其实另外一种方式是用 -v 这个参数,不过我试了,行不通。