Docker-compose 掛載 (mount) 資料教學

Docker-compose 設定檔注意事項 這篇文章的範例中,我們使用了 MongoDb 的容器。yml 如下:

1
2
3
4
5
6
7
8
version: '3'
services:
mongo-local-test.com:
image: mongo
container_name: mongodb_cotainer
ports:
- "27117:27017"
entrypoint: [ "/usr/bin/mongod","--bind_ip", "localhost,mongo-local-test.com"]

好處是每次開啟都是全新的,不用擔心資料弄髒弄壞,但如果想保留資料怎麼辦?這時候需要使用到 volumes 設定了。

1
2
volumes:
- '~/Desktop/mount-mongo-data:/data/db'

: 之前的是實體位置,之後的是 container 內的位置。

設定完後 docker-compose up / down 就可以看到實體檔案在該路徑上了。如下:

1
2
3
4
5
6
7
8
➜  mount-mongo-data ls
WiredTiger _mdb_catalog.wt index-1-6246240698095516127.wt mongod.lock
WiredTiger.lock collection-0-6246240698095516127.wt index-3-6246240698095516127.wt sizeStorer.wt
WiredTiger.turtle collection-2-6246240698095516127.wt index-5-6246240698095516127.wt storage.bson
WiredTiger.wt collection-4-6246240698095516127.wt index-6-6246240698095516127.wt
WiredTigerHS.wt diagnostic.data journal
➜ mount-mongo-data pwd
/Users/mingyi/Desktop/mount-mongo-data

總不可能每次都指定實體位置吧~這樣要維護也很困難,另一種方式就跟其他 container 的 voulume 一樣放置,語法如下:

1
2
3
4
5
6
7
8
9
10
11
12
version: '3'
volumes:
mongo-mount-data:

services:
mongo-local-test.com:
image: mongo:latest
container_name: mongo_latest
ports:
- "27117:27017"
volumes:
- mongo-mount-data:/data/db

mongo-mount-data 就是我們 volume 的命名,接著可以透過 docker volume ls 指令查看是否真的存在。

如果要取得確切位置與相關資訊,可以使用 docker inspect [volume_name] 來查看,例如:

docker inspect vscode_mongo-mount-data

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[
{
"CreatedAt": "2021-06-19T15:30:48Z",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "vscode",
"com.docker.compose.version": "1.29.1",
"com.docker.compose.volume": "mongo-mount-data"
},
"Mountpoint": "/var/lib/docker/volumes/vscode_mongo-mount-data/_data",
"Name": "vscode_mongo-mount-data",
"Options": null,
"Scope": "local"
}
]