1. 程式人生 > >Docker 掛載

Docker 掛載

# 簡介   叢集當中掛載資料卷的方式採用**--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 ``` ![](https://img2020.cnblogs.com/blog/697931/202007/697931-20200728131028507-127701894.png)
  圖中可見,在執行時會自動建立宿主機目錄,但是內容為空,並且容器也無法啟動,會報錯:未找到nginx.conf 也就是說**在對映的時候,宿主機沒有nginx.conf**檔案.所以導致nginx無法啟動
## 2.自動建立檔案   這裡會看到直接報錯。
![](https://img2020.cnblogs.com/blog/697931/202007/697931-20200728131533433-606543004.png)
## 3.宿主機已存在檔案掛載   正常掛載
![](https://img2020.cnblogs.com/blog/697931/202007/697931-20200728132132017-1636723462.png)
## 4.掛載已存在目錄   正常掛載
![](https://img2020.cnblogs.com/blog/697931/202007/697931-20200728132611620-2022736441.png)
## 總結 > 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 re