Docker 掛載

zyz1發表於2020-07-28

簡介

  叢集當中掛載資料卷的方式採用--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

相關文章