Docker 持久化 SQLite 數(shù)據(jù)庫文件
使用 docker container 部署運行 Flask web app,默認是不會持久化數(shù)據(jù)的。 如果 web app 用到 SQLite 數(shù)據(jù)庫, 那么當 docker container 在運行的時候, SQLite 數(shù)據(jù)庫是得到正確更新的, 問題是一旦終止 docker container 的運行, SQLite 數(shù)據(jù)庫中原先的更新都消失了。這顯然不可接受。?
如何持久化 SQLite 數(shù)據(jù)庫文件中的數(shù)據(jù)呢? 答案是 docker volume。
具體步驟
首先,使用 “docker volume create myapp-db” 命令創(chuàng)建一個叫做 myapp-db 的 volume。 這個 volume 在 /var/lib/docker/volumes 下面。 可以使用 docker volume inspect myapp-db 查看細節(jié)。注意:這時,這個 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 后面附加下面的參數(shù) “--mount type=volume,src=myapp-db,target=/app”。 src=myapp-db 指定 volume 的名稱, 我們想把這個位于主機(host)的 volume 掛載到 docker container 某個路徑下面去,進而實現(xiàn)數(shù)據(jù)互通。 target=/app 指定目標掛載位置, /app 是對于 docker container 而言的路徑, 不是主機的路徑。以這種方式運行 docker container,就能持久化 SQLite 數(shù)據(jù)庫文件。
關鍵要搞清 src 是啥, target 是啥。 其實另外一種方式是用 -v 這個參數(shù),不過我試了,行不通。