在 Docker 管理資料

在 container 所建立的檔案,預設都會存放在可容器寫入層(writable container layer)

這表示:

  • 當container不沒有運行時,資料就會跟著消失
  • container中的數據很難從外部取得
  • 可寫入容器層的資料,與container高度耦合,很難將資料搬移到其他地方
  • 需要透過 storage driver 來管理filesystem

當你建立一個新的 container,會同時在最上層建立一個新的可寫入層(writable layer),也稱為 container layer。

在 container內所有的改變都會在這裡面,例如: 建立新檔案,編輯檔案,刪除檔案,都會寫入這個容器可寫入層。

例如,下圖是基於 Ubuntu 15.04 image 的 container。

但是,寫入層雖然輕巧有效率,但是卻存這些缺點:

  • 讀寫效率差
  • Container 停止運行,資料會同時刪除

因此,為了解決這些問題,Docker提供了兩種 Mount 解決方案:

  1. Volumes and bind mounts
  2. tmpfs mount (Linux)

選擇適合的 Mount

下圖清楚了說明Docker host的 Volume with bind mounts 以及tmpfs mount 機制

接下來,先特別針對 Volume with bind mounts, bind mounts以及 tmpfs 的差別

Volumes

Volumes 屬於 bind mounts 一部分,會將資料儲存在 filesystem (/var/lib/docker/volumes/)中,

並且這些 Volumes 所儲存的資料會由 Docker 負責管控,

只有透過Docker才能取得 Volumes 儲存於 filesystem 的資料。

目前相當推薦使用 Volumes 來管理Docker上的資料。

Bind Mounts

Bind mounts 則是將資料儲存在 host system 任意位置,存取的資料可能包含系統資料或目錄.

Docker或者非Docker流程,都能隨時訪問及修改 bind mounts 檔案.

tmpfs mounts

tmpfs mounts 只會儲存於host system的記憶體,不會寫入 host system的 filesystem。