Persistant Data
運行 Container 時,會在 Image 的最後再疊加一層可以讀/寫的 layer。
在 Container 中創建的任何資料會跟著 Container 的刪除而消亡。
如果要將這些資料保留下來,則需要用到 Container Volume 或是 Bind Mount 技術。
Container Volume
將 Container filesystem 中的指定路徑與主機做連結。
- Volumn 創建及內部資料的更新皆由 Docker 管理,不建議直接操作。
- Volume 可以同時用在 Linux 及 Windows 系統。
- Volume 可以安全地被多個 Container 共用。
- 使用 Volume 可以避免 Container 變肥。
創建 Volume
docker volume create [VOLUME_NAME]
Volume 與 Container 連結
docker run -v [VOLUME_NAME]:[FS_PATH_IN_CONTAINER]- 沒有事先
docker create [VOLUME_NAME]也沒關係,Docker 會自己創建。
- 沒有事先
docker run -v [FS_PATH_IN_CONTAINER]:隨著啟動 Container 創建 Anonymous Volume。docker run --mount [MOUNT_CONFIG]
經此設定後,[FS_PATH_IN_CONTAINER] 即與 Volume 同步。
Readonly Volume
docker run -v [VOLUME_NAME]:[FS_PATH_IN_CONTAINER]:ro
看看 Volume 在哪裏
docker volume inspect [VOLUME_NAME]
[
{
"CreatedAt": "2019-09-26T02:18:36Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/VOLUME_NAME/_data",
"Name": "VOLUME_NAME",
"Options": {},
"Scope": "local"
}
]
Mountpoint 即為資料儲存的路徑。
- 桌機版的 Docker 實際上是運行在 VM 中的,如果要存取 Volume 中的資料,可能需要先存取 VM 中的環境。
Volume Driver
可以透過 Volume Driver 機制,把 Volume 存在其他機器上。
Bind Mount
將 Container filesystem 中的指定路徑與主機中的指定路徑做連結。
- 使用方式與 Volume,但不交由 Docker 管理。
- 通常用在將資料掛載至 Container 中使用,例如:Server 所需的靜態資源。
資料與 Container 連結
docker run -v [HOST_PATH]:[FS_PATH_IN_CONTAINER]
[HOST_PATH]設定為$(pwd)怎表示為當前路徑。