Docker Mount
下圖清楚了說明Docker host的 Volume with bind mounts 以及tmpfs mount 機制
這裡針對 Volumes 部分進行介紹:
建立 Volumes
Volumes 由 Docker 建立及進行管理
可以透過下方指令建立一個 volume
docker volume create
或者可以透過container 或 service 來建立 volume
Volume 儲存位置
建立好的 Volumes 會儲存在Docker host filesystem (/var/lib/docker/volumes/),
當你需要在container mount 這個volume 時,只要直接透過這個目錄就能達成
host machine 核心功能包括: Docker 管理 Volumes 的資料,
也只有透過Docker才能取得 Volumes 儲存於 filesystem 的資料。
Volume 可被重複使用
一個建立好的 Volumes 可以被多個containers 同步使用
Volume 能保留著資料
當 container 停止運作時,會刪除掉可寫入層的資料
但是,Volume並不會受影響
刪除 Volume
Volume 可以透過下方指令刪除
docker volume prune
Volumes 支援遠端連線
Volumes 提供 Volume drivers,讓你可以將資料純存在遠端的 host 或雲端供應商的主機中
Volumes 使用案例
當我們在 Docker 使用 containers 或 Services 並且需要讀寫資料時, Volumes會是不錯的選擇
一些使用volumes 的案例包括:
- 多個執行中的 container 可同步共享同一個 Volumes
- 不需要特別設定,通常在建立 volume 就會直接 mount 至 container
- 當container stop 或 remove 時,volume仍然會保留
- Volume只能透過手動移除的方式來刪除資料
- 若 Docker host 不確定是否提供目錄或資料夾,仍可透過 Volumes 幫你在 container 運行時將 Docker host 獨立出來
- 可以將container資料儲存於 local,遠端host或雲端供應商環境
- 可以直接透過
/var/lib/docker/volumes/<volume-name>
將資料進行備份、恢復、遷移至其他host
注意事項
再使用 bind mounts 或者 volumes 都需要注意下列幾點:
- 如果 container 所 mount 的位置已經存在檔案或目錄,這些內容一會被複製到 volume 裡。同樣的,如果你啟動 container 並且指定的 volume 尚未存在,將會建立一個空的 volume 。這樣的做法,對於多個 container 共用同一份 volume 時,會是最好的處理方式。
- 如果 container mount 的 bin-mount 資料夾或目錄已經存在或 mount 的不是空的 volume,將會以模糊的方式來處理。舉例來說,如果當container mount 資料夾是/mnt ,在 Linux 這個資料夾同時會被用來 mounted USB Drive,在執行期間若 USB 移除,並不會影響已經 mount 的 bind mount或 volume。