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。