
- Docker 教程
- Docker - 首頁
- Docker - 概述
- Docker - 在 Linux 上安裝
- Docker - 安裝
- Docker - Hub
- Docker - 映象
- Docker - 容器
- Docker - 登錄檔
- Docker - Compose
- Docker - 使用容器
- Docker - 架構
- Docker - 層
- Docker - 容器和主機
- Docker - 配置
- Docker - 容器和 Shell
- Docker - Dockerfile
- Docker - 構建檔案
- Docker - 公共倉庫
- Docker - 管理埠
- Docker - Web 伺服器
- Docker - 命令
- Docker - 容器連結
- Docker - 資料儲存
- Docker - 卷
- Docker - 網路
- Docker - 安全
- Docker - 工具箱
- Docker - 雲
- Docker - 構建雲
- Docker - 日誌
- Docker - 持續整合
- Docker - Kubernetes 架構
- Docker - Kubernetes 的工作原理
- Docker - 生成式 AI
- Docker - 託管
- Docker - 最佳實踐
- Docker 設定服務
- Docker - 設定 Node.js
- Docker - 設定 MongoDB
- Docker - 設定 NGINX
- Docker - 設定 ASP.Net
- Docker - 設定 MySQL
- Docker - 設定 Go
- Docker - 設定 Rust
- Docker - 設定 Apache
- Docker - 設定 MariaDB
- Docker - 設定 Jupyter
- Docker - 設定 Portainer
- Docker - 設定 Rstudio
- Docker - 設定 Plex
- Docker 設定 - Flame
- Docker 設定 - PostgreSQL
- Docker 設定 - Mosquitto
- Docker 設定 - Grafana
- Docker 設定 - Nextcloud
- Docker 設定 - Pawns
- Docker 設定 - Ubuntu
- Docker 設定 - RabbitMQ
- Docker - 設定 Python
- Docker - 設定 Java
- Docker - 設定 Redis
- Docker - 設定 Alpine
- Docker - 設定 BusyBox
- Docker 設定 - Traefik
- Docker 設定 - WordPress
- Docker 有用資源
- Docker - 快速指南
- Docker - 有用資源
- Docker - 討論
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 卷
列出本地主機上的 Docker 卷將是幫助您管理卷的最常用命令之一。如果要列出系統上的所有 Docker 卷,可以使用 docker volume ls 命令。
$ docker volume ls

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

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

將 Docker 卷與容器一起使用
執行容器時,可以使用 -v 或 --mount 選項指定卷。-v 選項更簡單,更常用,而 --mount 提供更高階的配置選項。
使用 -v -
$ docker run -d -v my_volume:/data my_image

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

備份 Docker 卷
備份卷中儲存的資料始終很有用,因為如果意外刪除卷,它將幫助您恢復丟失的資料。您可以將卷中的資料儲存到 tarball 檔案中。為此,您可以使用容器來壓縮卷的內容並將其輸出到主機系統上的檔案。以下是名為 my_volume 的卷的示例命令:
$ docker run --rm -v my_volume:/data -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /data

從備份恢復 Docker 卷
一旦將資料備份到 tarball 檔案中,就可以使用以下命令將其恢復到 Docker 卷。以下是將名為 my_volume 的卷從備份檔案恢復的示例命令:
$ docker run --rm -v my_volume:/data -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar -C /data

結論
在本章中,我們討論了 Docker 卷是什麼以及它們與繫結掛載的不同之處。然後,我們討論了幾個 Docker 卷命令,這些命令將幫助您輕鬆管理和使用 Docker 環境中的持久儲存。使用這些命令,您可以建立、檢查、列出、刪除、備份和恢復卷。這確保了容器中的應用程式在需要時擁有可靠且靈活的儲存。
關於 Docker 卷的常見問題
1. 如何使用卷在 Docker 容器中持久化資料?
您可以將 Docker 卷掛載到容器內的任何路徑,並在容器生命週期中持久化資料。您可以使用 docker volume create 建立命名卷,然後在啟動新容器時使用 -v 或 --mount 標誌將其掛載。
2. 我可以在容器之間共享 Docker 卷嗎?
是的,這是可能的。多個容器可以訪問同一個卷並能夠更改它們。要共享卷,您只需要將同一個卷掛載到多個不同的容器中一次。Docker 本身會同步正在執行的例項之間的資料。