永久性卷宗(Persistent volumes)

Docker 中級

Mike Metzger

Data Engineering Consultant

什麼是 volume?

  • Volumes 是在 Docker 中儲存資料的選項,獨立於容器映像檔主機檔案系統
  • 由命令列(或 API)管理
  • 可供多個容器共享
  • 比檔案分享/ bind mounts 有更高效能
  • 會持續存在,直到被移除

卷掛載示意圖

1 Image modified from https://docs.docker.com
Docker 中級

管理 volumes

  • docker volume
  • docker volume create <volumename>
  • docker volume lsdocker volume list
  • docker volume inspect
    • 提供該 volume 的各種中繼資料,包括 Name、Mountpoint、Options 等
  • docker volume rm
Docker 中級

建立 volume 範例

bash> docker volume create sqldata
sqldata
bash> docker volume ls
DRIVER    VOLUME NAME
local     2f2b7f710551e004dcdd9edf4cad31c37826b428de12f1c04ca02305d216ab00
local     14da7ff0c6eb29f644e6f9f9d59bbcf56b3699c04881dd7cbcaa9ecd6bef239c
local     150aa3c5c7aee30ffd1ec7ecf39f03989bf561536a9413ebed96ffbaa537d103
local     sqldata
...
Docker 中級

inspect volume 範例

bash> volume inspect sqldata

[ { "CreatedAt": "2024-01-27T04:27:51Z", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/sqldata/_data", "Name": "sqldata", "Options": null, "Scope": "local" } ]
Docker 中級

掛載 volumes

  • 使用 -v 指令
    • docker run -v <volumename>:<destination path>:<options>
    • Volume name 為既有 volume 的名稱
    • Destination path 為掛載位置(例如 /data)
    • Options 為以逗號分隔的可選值,例如唯讀用 ro
  • 也可使用 --mount,如同 bind-mounts
$ docker run -v sqldata:/data postgres
Docker 中級

驅動程式(Drivers)

  • Docker volume 的儲存方式
  • 可能包含:
    • 本機檔案系統(預設)
    • NFS(Unix 檔案分享)
    • SMB/CIFS(Windows 檔案分享)
Docker 中級

一起來練習吧!

Docker 中級

Preparing Video For Download...