Docker 基礎知識 - 使用卷(volume)管理應用程式資料
阿新 • • 發佈:2020-07-15
卷(volumes)是 Docker 容器生產和使用持久化資料的首選機制。[繫結掛載(bind mounts)](https://docs.docker.com/storage/bind-mounts/)依賴於主機的目錄結構,卷(volumes)完全由 Docker 管理。卷與繫結掛載相比有幾個優勢:
- 卷比繫結掛載更容易備份或遷移。
- 您可以使用 Docker CLI 命令或 Docker API 來管理卷。
- 卷可以在 Linux 和 Windows 容器上工作。
- 卷可以更安全地在多個容器之間共享。
- 卷驅動程式允許您在遠端主機或雲提供商上儲存卷、加密卷的內容或新增其他功能。
- 新卷的內容可以由容器預先填充。(New volumes can have their content pre-populated by a container.)
此外,與將資料持久化到容器的可寫層相比,卷通常是更好的選擇,因為卷不會增加使用它的容器的大小,而且卷的內容存在於給定容器的生命週期之外。
![docker-types-of-mounts-volume](https://img2020.cnblogs.com/blog/2074831/202007/2074831-20200715011755142-1123249985.png)
如果容器生成非永續性狀態資料,請考慮使用 [tmpfs 掛載(tmpfs mount)](https://docs.docker.com/storage/tmpfs/)以避免將資料永久儲存在任何位置,並通過避免寫入容器的可寫層來提高容器的效能。
卷使用 `rprivate` 繫結傳播,並且繫結傳播對於卷是不可配置的。
## 選擇 -v 或 --mount 標記
最初,`-v` 或 `--volume` 標記用於獨立容器,`--mount` 標記用於叢集服務。但是,從 Docker 17.06 開始,您也可以將 `--mount` 用於獨立容器。通常,`--mount` 標記表達更加明確和冗長。最大的區別是 `-v` 語法將所有選項組合在一個欄位中,而 `--mount` 語法將選項分離。下面是每個標記的語法比較。
> 新使用者推薦使用 `--mount` 語法,它比 `--volume` 語法更簡單。
如果需要指定卷驅動程式選項,則必須使用 `--mount`。
- `-v` 或 `--volume`: 由三個欄位組成,以冒號(:)分隔。欄位必須按照正確的順序排列,且每個欄位的含義不夠直觀明顯。
- 對於命名卷,第一個欄位是卷的名稱,在給定的主機上是惟一的。對於匿名卷,省略第一個欄位。
- 第二個欄位是容器中檔案或目錄掛載的路徑。
- 第三個欄位是可選的,是一個逗號分隔的選項列表,比如 `ro`。這些選項會在本文下面討論。
- `--mount`:由多個鍵-值對組成,以逗號分隔,每個鍵-值對由