Docker - 卷



Docker 卷是 Docker 資料管理的重要組成部分,因為它為 Docker 容器提供了資料永續性。卷允許資料存在於容器的可寫層之外,保證資料在移除或升級容器時不會丟失。這對於資料庫、配置檔案或需要跨容器重啟或部署生存的應用程式資料尤其重要。

與將主機檔案系統中的目錄對映到容器中的繫結掛載不同,Docker 卷由 Docker 本身管理,並提供更高的抽象性和可移植性。由於卷可以在多個容器之間共享,因此當不同的服務需要訪問相同資料時,它們非常有用。

Docker 卷的工作原理是什麼?

Docker 卷是獨立的檔案系統,存在於容器生命週期之外。這種分離確保資料持久存在,並且可以輕鬆地在多個容器之間共享。

Docker 卷的工作方式如下:

  • 建立 - 可以使用“docker volume create”命令顯式建立卷,也可以在使用卷掛載啟動容器時隱式建立。
  • 儲存 - 卷儲存在主機的特定目錄中,在 Linux 系統上預設為 /var/lib/docker/volumes。
  • 掛載 - 卷被掛載到容器中的特定路徑:寫入這些路徑的資料儲存在卷中,而不是容器的可寫層。
  • 永續性 - 即使停止、更新或刪除容器也不會影響卷中的資料。因此,這使得在不同容器例項之間保持永續性相對容易。
  • 共享 - 多個容器可以同時共享卷。它允許不同的容器訪問或修改相同的資料。
  • 管理 - 可以使用 Docker 命令(例如列出、檢查和刪除卷)輕鬆管理卷。此外,可以使用卷驅動程式將卷儲存在遠端主機或雲提供商上。

卷和繫結掛載的區別

Docker 中的卷和繫結掛載都有助於在容器和主機之間儲存和共享資料,但方式不同。讓我們討論 Docker 卷和繫結掛載之間的主要區別。

特性 Docker 卷 繫結掛載
管理 由 Docker 管理 由主機系統管理
位置 儲存在 Docker 管理的目錄 (/var/lib/docker/volumes/) 中 可以是主機檔案系統上的任何目錄
可移植性 更具可移植性,適用於容器編排 可移植性較差,取決於主機的目錄結構
效能 由 Docker 最佳化 I/O 操作 效能取決於主機檔案系統
隔離性 提供更好的資料隔離和安全性 直接訪問主機檔案系統,隔離性較差
易用性 透過 Docker 命令更易於使用和管理 需要了解主機檔案系統路徑
資料共享 易於在多個容器之間共享 可以共享,但更復雜
資料永續性 資料在容器生命週期結束後仍然存在 資料也持久存在,但由 Docker 範圍之外管理
備份和恢復 使用 Docker 命令更容易備份和恢復 需要手動備份和恢復過程
靈活性 儲存路徑固定,靈活性較差 更靈活,允許任意主機路徑
安全性 在 Docker 上下文中具有更好的安全管理 依賴於主機的安全設定和訪問控制
配置 使用 docker volume 命令建立和管理 直接在 docker run 命令中指定
設定 需要 Docker 處理卷生命週期 可以使用主機路徑在沒有 Docker 的情況下設定
許可權 由 Docker 使用卷選項管理 繼承自主機的目錄許可權

Docker 卷命令

如前所述,Docker 卷幫助我們建立和管理 Docker 容器中的持久儲存。Docker 卷命令使管理它們更容易。讓我們討論一些用於建立、管理和對 Docker 卷執行各種操作的命令。

建立 Docker 卷

如果要建立新的 Docker 卷,可以使用 docker volume create 命令。使用此命令建立的卷可以被一個或多個容器使用。

$ docker volume create my_volume
Docker Volumes 1

列出 Docker 卷

列出本地主機上的 Docker 卷將是幫助您管理卷的最常用命令之一。如果要列出系統上的所有 Docker 卷,可以使用 docker volume ls 命令。

$ docker volume ls
Docker Volumes 2

檢查 Docker 卷

如果要獲取有關特定卷的詳細資訊,可以使用 docker volume inspect 命令。此命令需要指定卷的名稱或 ID,您可以使用 volume list 命令獲取。它將提供有關卷在主機上的位置及其配置的詳細資訊。

$ docker volume inspect my_volume
Docker Volumes 3

刪除 Docker 卷

如果要清理本地機器並刪除不再需要的 Docker 卷,可以使用 docker volume rm 命令。它允許您僅刪除當前未被任何容器使用的卷。

$ docker volume rm my_volume
Docker Volumes 4

將 Docker 卷與容器一起使用

執行容器時,可以使用 -v 或 --mount 選項指定卷。-v 選項更簡單,更常用,而 --mount 提供更高階的配置選項。

使用 -v -

$ docker run -d -v my_volume:/data my_image
Docker Volumes 5

使用 --mount -

$ docker run -d --mount source=my_volume,target=/data my_image

刪除未使用的卷

Docker volume remove 命令一次只能刪除一個卷。但是,如果要刪除所有未使用的 Docker 卷以釋放機器中的一些空間,可以使用 docker volume prune 命令。執行此命令時,它會在刪除所有懸空卷之前提示您進行確認。

$ docker volume prune
Docker Volumes 6

備份 Docker 卷

備份卷中儲存的資料始終很有用,因為如果意外刪除卷,它將幫助您恢復丟失的資料。您可以將卷中的資料儲存到 tarball 檔案中。為此,您可以使用容器來壓縮卷的內容並將其輸出到主機系統上的檔案。以下是名為 my_volume 的卷的示例命令:

$ docker run --rm -v my_volume:/data -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /data
Docker Volumes 7

從備份恢復 Docker 卷

一旦將資料備份到 tarball 檔案中,就可以使用以下命令將其恢復到 Docker 卷。以下是將名為 my_volume 的卷從備份檔案恢復的示例命令:

$ docker run --rm -v my_volume:/data -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar -C /data
Docker Volumes 8

結論

在本章中,我們討論了 Docker 卷是什麼以及它們與繫結掛載的不同之處。然後,我們討論了幾個 Docker 卷命令,這些命令將幫助您輕鬆管理和使用 Docker 環境中的持久儲存。使用這些命令,您可以建立、檢查、列出、刪除、備份和恢復卷。這確保了容器中的應用程式在需要時擁有可靠且靈活的儲存。

關於 Docker 卷的常見問題

1. 如何使用卷在 Docker 容器中持久化資料?

您可以將 Docker 卷掛載到容器內的任何路徑,並在容器生命週期中持久化資料。您可以使用 docker volume create 建立命名卷,然後在啟動新容器時使用 -v 或 --mount 標誌將其掛載。

2. 我可以在容器之間共享 Docker 卷嗎?

是的,這是可能的。多個容器可以訪問同一個卷並能夠更改它們。要共享卷,您只需要將同一個卷掛載到多個不同的容器中一次。Docker 本身會同步正在執行的例項之間的資料。

廣告