五、Docker 數據持久化存儲與性能調優

本文是《Docker必知必會系列》第五篇,原文發佈於個人博客:悟塵紀

上一篇:Docker必知必會系列(四):Docker 網絡原理、分類及容器互聯配置

數據持久化存儲與性能調優

數據持久保存

默認情況下,在容器內創建的所有文件都存儲在可寫容器層上。這意味着當該容器不再存在時,數據也將丟失。

爲了讓數據脫離容器持久保存,Docker 提供了兩個選項來將文件持久存儲在主機中: volumebind mount 。如果您在 Linux 上運行 Docker,則還可以使用 tmpfs 掛載。如果您在 Windows 上運行 Docker,則還可以使用命名管道

掛載的類型以及它們在Docker主機上的位置

  • **volume(卷)**存儲在主機文件系統的一部分中,該文件系統由 Docker 管理/var/lib/docker/volumes/在 Linux 上)。非 Docker 進程不應修改文件系統的這一部分。卷是在 Docker 中持久保存數據的最佳方法。
  • **bind mount(綁定掛載)**可以存儲在主機系統上的任何位置。它們甚至可能是重要的系統文件或目錄。Docker 主機或 Docker 容器上的非 Docker 進程可以隨時對其進行修改。
  • tmpfs掛載 僅存儲在主機系統的內存中,並且永遠不會寫入主機系統的文件系統中。

volumebind mount 都可以使用 -v--volume 標誌安裝到容器中,但是兩者的語法略有不同。

關於掛載類型的更多詳細信息:Manage data in Docker

掛載卷性能調優

在 macOS(和其他非 Linux 平臺)上,保證容器內和主機文件一致性的開銷很大。然而,在許多情況下,容器與主機之間不需要完美的一致性。區分不同情況可以顯着提高性能。

通過在 docker run -v--volume 的 option 中指定 cacheddelegated,可以顯着提高 Docker Desktop for Mac 上已裝載卷訪問的性能。您可以根據情況調整所需的一致性級別:

  • consistent:默認值,完美的一致性,即主機和容器實時一致。
  • cached:主機具有權威性。容器執行的寫操作對主機是立即可見的,但是在主機上執行的寫操作可能不會立即反應在容器內。
  • delegated:容器的內容具有權威性。提供最弱保證,由容器執行的寫操作可能不會立即反映在主機文件系統上,提供的性能要比其他配置好得多。

爲每個掛載卷獨立設置緩存策略,例如:

docker run \
    -v /Users/lixl.cn/project:/project:cached \
    -v /host/another-path:/mount/another-point:consistent \
    alpine command

相關文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章