簡介
叢集當中掛載資料卷的方式採用--mount標誌。而且-mount標記相比於-v意圖更明確.
如果不進行資料掛載的話,當容器不在時,對應的資料也不會持久存在
儲存方式
- 卷儲存,由docker管理使用docker -volume create建立管理。卷也是docker官方推薦的持久化方式
- 繫結掛載,就是把宿主機的地址掛載到容器內
- tmpfs掛載只儲存在主機系統的記憶體當中。(用到的比較少)
繫結目錄
採用-v的方式掛載容器。該檔案或目錄不需要在Docker主機上已經存在,如果尚不存在,則按需建立
- 採用-v的形式宿主機的檔案會覆蓋data裡面的檔案。
- 如果宿主機目錄為空的話,容器內掛載檔案會清空
docker run -tid -v /etc/docker/redis/data:data --name redis redis
1.自動建立目錄
# 該路徑現在不存在,run之後自動生成
docker run -tid --name nginx -v /root/data/nginxtest:/etc/nignx/ nginx
圖中可見,在執行時會自動建立宿主機目錄,但是內容為空,並且容器也無法啟動,會報錯:未找到nginx.conf 也就是說**在對映的時候,宿主機沒有nginx.conf**檔案.所以導致nginx無法啟動
2.自動建立檔案
這裡會看到直接報錯。
3.宿主機已存在檔案掛載
正常掛載
4.掛載已存在目錄
正常掛載
總結
1.掛載空目錄容器內的資訊會被覆蓋.
2.掛載目錄時會自動建立目錄,但是檔案不會建立
3.如果需要掛載目錄,需要先把需要掛載的內容cp到宿主機,然後執行掛載
建立資料卷
資料卷專案繫結d目錄有如下優點:
- 更容易遷移和備份
- 可以使用docker cli命令管理卷
- 卷在liunx和windows 都可以使用
- 可在多個容器之間共享資料卷
# 建立資料卷
docker volume create my-data
# 檢視資訊
docker volume inspect my-data
# 檢視所有卷資訊
docker volume ls
# 刪除卷
docker volume rm my-data
掛載資料卷
首先需要建立資料卷,當然也可以在建立service的時候,指定資料卷名稱,會自動建立一個資料卷,叢集中的資料卷都是採用--mount引數進行掛載。
type為bind的時候,掛載的是主機路徑,必須引用主機上現有的路徑,並且不會自動建立該路徑,如果路徑不存在,服務建立失敗
type為volume的時候掛載的是資料卷。
# 掛載資料卷
docker service create --mount type=volume,src=redisdata,dst=/data --name redis redis
# 掛載目錄
docker service create --mount type=bind,src=/data,dst=/data --name redis redis