Docker 可以運行隔離的容器,包括應用程式和其依賴項,與主機操作系統分離。預設情況下,容器是臨時的,這意味著容器中存儲的任何數據在終止後都將丟失。為瞭解決這個問題併在容器生命周期內保留數據,Docker 提供了各種數據持久化方法。 - **Docker 捲** - **綁定掛載** - **Do ...
Docker 可以運行隔離的容器,包括應用程式和其依賴項,與主機操作系統分離。預設情況下,容器是臨時的,這意味著容器中存儲的任何數據在終止後都將丟失。為瞭解決這個問題併在容器生命周期內保留數據,Docker 提供了各種數據持久化方法。
- Docker 捲
- 綁定掛載
- Docker tmpfs 掛載
Docker 捲
Docker 捲是持久化 Docker 容器生成和使用的數據的首選方法。捲是主機機器上的目錄,Docker 用它來存儲文件和目錄,可以超出容器生命周期。Docker 捲可以在容器之間共用,並提供各種好處,如易於備份和數據遷移。
要創建捲,請使用以下命令:
docker volume create volume_name
要使用捲,請在您的 docker run
命令中添加 --volume
(或 -v
)標誌:
docker run --volume volume_name:/container/path image_name
綁定掛載
綁定掛載允許您將主機機器上的任何目錄映射到容器內的目錄。這種方法在開發環境中很有用,當您需要修改主機系統上的文件,並且這些更改應立即在容器中生效時。
要創建綁定掛載,請在您的 docker run
命令中使用 --mount
標誌,並將 type=bind
添加到其中:
docker run --mount type=bind,src=/host/path,dst=/container/path image_name
Docker tmpfs 掛載
Docker tmpfs 掛載允許您在容器的記憶體中直接創建臨時文件存儲。在 tmpfs 掛載中存儲的數據快速且安全,但一旦容器終止,數據將丟失。
要使用 tmpfs 掛載,請在您的 docker run
命令中添加 --tmpfs
標誌:
docker run --tmpfs /container/path image_name
通過採用這些方法,您可以確保容器生命周期內的數據持久性,增強 Docker 容器的實用性和靈活性。請記住選擇最適合您用例的方法,無論是首選 Docker 捲,方便的綁定掛載,還是快速且安全的 tmpfs 掛載。
臨時文件系統
預設情況下,Docker 容器內的存儲是短暫的,這意味著容器內部進行的任何數據更改或修改只會持續到容器運行的時間。一旦容器停止並移除,所有相關的數據都將丟失。這是因為 Docker 容器的本質是無狀態的。
這種臨時或短暫的存儲稱為“臨時容器文件系統”。這是 Docker 的一個重要特性,因為它能夠在不考慮容器狀態的情況下,在不同的環境中快速、一致地部署應用程式。
臨時文件系統與數據持久性
任何存儲在容器的臨時文件系統中的數據在容器停止或移除時都會丟失,這對應用程式的數據持久性構成了挑戰。對於像資料庫這樣需要在多個容器生命周期中保持數據持久性的應用程式,這是特別有問題的。
為了剋服這些挑戰,Docker 提供了幾種數據持久性的方法,例如:
- 捲:Docker 管理的存儲選項,存儲在容器的文件系統之外,允許數據在容器重新啟動和刪除時持久化。
- 綁定掛載:將主機機器的目錄或文件映射到容器中,有效地將主機的存儲與容器共用。
- tmpfs 掛載:記憶體中的存儲,適用於僅需要在容器生命周期內持久化數據的情況。
通過實施這些策略,Docker 確保應用程式數據可以在單個容器的生命周期之外得以保留,使得可以處理有狀態的應用程式。
捲掛載(Volume Mounts)
捲掛載是將主機系統上的文件夾或文件映射到容器內部的文件夾或文件的一種方式。這使得即使容器被刪除,數據仍然可以在容器外部保持。此外,多個容器可以共用同一個捲,使得容器之間的數據共用變得容易。
創建捲(Creating a Volume)
要在Docker中創建一個捲,您需要運行以下命令:
docker volume create my-volume
此命令將創建名為my-volume
的捲。您可以使用以下命令查看創建的捲的詳細信息:
docker volume inspect my-volume
將捲掛載到容器(Mounting a Volume in a Container)
要將捲掛載到容器中,您需要在運行容器時使用-v
或--mount
標誌。以下是一個例子:
使用-v
標誌:
docker run -d -v my-volume:/data your-image
使用--mount
標誌:
docker run -d --mount source=my-volume,destination=/data your-image
在上面的兩個示例中,my-volume
是我們之前創建的捲的名稱,/data
是捲將被掛載到容器內的路徑。
在多個容器之間共用捲(Sharing Volumes Between Containers)
要在多個容器之間共用捲,只需在多個容器上掛載相同的捲即可。以下是如何在運行不同映像的兩個容器之間共用my-volume
的示例:
docker run -d -v my-volume:/data1 image1docker run -d -v my-volume:/data2 image2
在此示例中,image1
和image2
將可以訪問存儲在my-volume
中的相同數據。
刪除捲(Removing a Volume)
要刪除捲,您可以使用docker volume rm
命令後跟捲名稱:
docker volume rm my-volume
這就是捲掛載在Docker中的基本知識。您可以使用它們高效且安全地在容器之間持久化和共用數據。
最後
為了方便其他設備和平臺的小伙伴觀看往期文章,鏈接奉上:
公眾號 Let us Coding
,牛客,知乎,開源中國,CSDN,思否,掘金,InfoQ,簡書,博客園,慕課,51CTO,helloworld,騰訊開發者社區,阿裡開發者社區
看完如果覺得有幫助,歡迎點贊、收藏和關註