docker數據卷也就是文件共享功能

docker數據卷也就是文件共享功能

前言:

Docker 數據管理
在生產環境中使用 Docker ,往往需要對數據進行持久化,或者需要在多個容器之間進行
數據共享,這必然涉及容器的數據管理操作

容器中的管理數據主要有兩種方式:
數據卷 Data Volumes 容器內數據直接映射到本地主機環境
數據卷容器(Data Volume Containers 使用特定容器維護數據卷

當然還有最原始的copy方式,這個也是管理數據的方式,但是基本不會用到;

最原始的copy方式管理數據:
宿主機文件 copy to 容器內
docker cp 需要拷貝的文件或者目錄 容器名稱:容器目錄
實例:
docker cp /hu/data/ db3:/hu/software

在這裏插入圖片描述

容器內 copy to 宿主機
docker cp 容器名稱:容器目錄 宿主機目錄
實例:
docker cp db3:/hu/software/test.txt /hu

數據卷

數據卷(Data Volumes)
數據卷是一個可供一個或多個容器使用的特殊目錄,它將主機操作系統目錄直接映射進容器,
它可以提供很多有用的特性:

  • 1.數據卷 可以在容器之間共享和重用
  • 2.對數據卷的修改會立馬生效
  • 3.對數據卷的更新,不會影響鏡像
  • 4.數據卷 默認會一直存在,即使容器被刪除

數據卷相關操作
1.創建數據卷

docker volume create my-vol

此時,數據卷默認會放到/var/lib/docker/volumes路徑下,會發現所新建的數據卷位置,查看命令如下:
參數可以爲數字“1”,字母L:大小寫均可,但效果不一樣

 ls -1 /var/lib/docker/volumes

2.查看所有的數據卷

 docker volume ls

3.查看指定數據卷的詳細信息(顯示一個JSON格式的數據)

 docker volume inspect my-vol 

4.刪除一個volume

docker volume rm my-vol

注1:數據卷 是被設計用來持久化數據的,它的生命週期獨立於容器,Docker不會在容器被刪除後自動刪除數據卷, 並且也不存在垃圾回收這樣的機制來處理沒有任何容器引用的數據卷,無主的數據卷可能會佔據很多空間,
所以要及時刪除

##掛載數據卷,最好是通過run而非create/start創建啓動容器
##create/start命令創建啓動容器後,再掛載數據卷相當麻煩,要修改很多配置文件,但並非不可以
5.啓動一個掛載數據卷的容器
## demo1

 docker run -d \
   -it \
   --name tomcat01 \
   --mount source=my-vol,target=/webapp \
   centos:7

注意:此行命令執行後的效果是,宿主機路徑/var/lib/docker/volumes/my-vol/_data與tomcat01容器路徑/webapp完成映射
## demo2

  docker run -d \
       -it \
       --name tomcat02 \
       --mount type=bind,source=/hu/data,target=/root/webapp02 \
       centos:7    
 注1:linux命令結尾加斜槓有什麼用
      加了“\”意爲將最後的回車換行給註釋了,系統理解爲命令還沒有結束,因而是繼續等待用戶進行輸入,直到讀到結束符,如回車

 注2:source=my-vol,target=/webapp
      my-vol爲要掛載的數據卷,如果數據卷不存在,docker會自動創建
      /webapp爲容器上目錄,如果目錄不存在, Docke會自動創建

 注3:mount選項高級用法
      --mount選項的type參數支持三種類型的數據卷
      --mount標誌:由多個名值對組成,逗號分隔,每個鍵值由 <key> = <value> 元組組成 
      1.type=volume普通數據卷(默認即這種類型),映射到主機/var/lib/docker/volumes路徑下;
        --mount type=volume,source=my-vol,target=/webapp
        注:這是type的默認值
      2.bind:綁定數據卷,映射到主機指定路徑下;
        --mount type=bind,source=/webapp,destination=/webapp2
      3.tmpfs :臨時數據卷,只存在於內存中
        docker run -d \
          -it \
          --name tmptest \
          --mount type=tmpfs,destination=/app \
          nginx:latest

數據卷容器

數據卷容器
如果用戶需要在多個容器之間共享一些持續更新的數據,最簡單的方式是使用數據卷容器。
數據卷容器也是一個容器,但是它的目的是專門提供數據卷給其他容器掛載

數據卷容器相關操作
1.新建數據卷容器

 docker run -di --name db_data -v /db_data centos:7
 注:-v 後面接的共享數據真實存放路徑

2.用容器db1、db2測試數據卷容器是否可用

 docker run -di --name db1 --volumes-from db_data centos:7
 docker exec -it db1 bash
 cd db_data
 
 docker run -di --name db2 --volumes-from db_data centos:7
 docker exec -it db2 bash
 cd db_data
 
 隨便創建一個aaa.txt文件就可以查看效果了

在這裏插入圖片描述

在這裏插入圖片描述

 效果:上面例子中db1、db2通過db_data來共享了數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章