在 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" } ]
|