容器的儲存體概念

已完成

根據預設,Windows 容器會針對所有輸入和輸出使用暫時性儲存體 (暫用空間)。 每個容器都有自己的暫用空間,所有檔案建立和檔案寫入皆會在此擷取,因此他們不會逸出至主機。 如果容器執行個體已刪除,則會擲回在臨時空間發生的所有變更。 啟動新的容器執行個體後,就會為該執行個體提供新的臨時空間。

圖層儲存體

所有容器都是從容器映像建立而來。 容器映像是以堆疊方式組織成的一組檔案 (稱為圖層儲存體),駐留於本機電腦或遠端容器登錄中。 容器映像包含下列項目所需的使用者模式作業系統檔案:

  • 支援您的應用程式
  • 任何應用程式執行階段
  • 您應用程式的相依性
  • 您的應用程式必須正確執行的任何其他設定檔

在 Windows 環境中,圖層使用 CimFS 儲存,且在 NTFS (New Technology File System)、ReFS 或 RefDisks 上支援圖層儲存體。 您可以使用 docker-root (或與容器同等的) 設定來變更檔案儲存的位置,但不應修改圖層目錄中的任何檔案。 我們使用 Docker (或同等命令) 對其進行精心管理。

永續性儲存體

在某些情況下,您的應用程式必須能夠保存容器中的資料。 或者,您可能想要將檔案儲存在容器建置時間未包含的容器中。 您可以透過幾種方式為 Windows 容器提供永續性儲存體:

  • 繫結裝載
  • 具名磁碟區

繫結裝載

繫結裝載透過將主機上的目錄對應至容器中的目錄,允許容器與主機共享目錄。 如果您希望位置將檔案儲存在本機電腦上,該本機電腦在重新啟動容器或失去暫存空間時仍可使用,則繫結裝載就非常有用。 或者,如果您想要與多個容器共用檔案。

不過,如果想要在具有相同檔案存取權的多部電腦上執行容器,則應該改用具名磁碟區區或伺服器訊息區 (SMB) 裝載。 重要的是,請勿將 C:\ 等敏感性目錄繫結裝載至未受信任的容器。 此繫結允許其變更主機上通常無法存取的檔案,可能會造成安全性缺口。

下列範例示範 Docker 命令,該命令使用預設讀取/寫入權限將主機上的資料夾 C:\ContainerData 繫結裝載至容器中的 C:\data

docker run -v c:\ContainerData:c:\data

具名磁碟區

具名磁碟區可讓您依名稱建立磁碟區、將其指派至容器,然後以相同名稱稍後重複使用。 磁碟區可讓您在專用於儲存容器資料的主機上建立和管理特殊位置。 您不需要追蹤其建立位置的實際路徑,只需記錄名稱即可。

Windows 上的 Docker 引擎具有內建的具名磁碟區外掛程式,可在本機電腦上建立磁碟區。 如果您想要在多部機器上使用具名磁碟區,則需要另一個外掛程式。

下列範例示範了用於建立和啟動名為 mycontainer 容器的 Docker 命令,該容器對應至本機磁碟區 c:data

docker volume create myvolume docker run -v myvolume:c:\data microsoft/windowsservercore

當繫結裝載依賴於主機的目錄結構和作業系統 (OS) 時,Docker 會完全管理磁碟區。 相較於繫結裝載,磁碟區具有許多優點:

  • 磁碟區比繫結裝載更容易備份或移轉。
  • 您可以使用 Docker CLI 命令或 Docker API 來管理磁碟區。
  • 磁碟區適用於 Linux 和 Windows 容器。
  • 磁碟區可以更安全地在多個容器之間共用。
  • 磁碟區驅動程式可讓您將磁碟區儲存在遠端主機或雲端提供者上、加密磁碟區的內容,或新增其他功能。
  • 新的磁碟區可以讓容器預先填入其內容。

此外,與在容器的可寫入圖層 (暫用空間) 中保存資料相較,磁碟區通常是更好的選擇。 磁碟區不會增加使用它的容器的大小(就像繫結裝載一樣),並且磁碟區的內容存在於指定容器的生命週期之外。