docker資料卷(Data Volumes)

Dawn.x發表於2020-12-21

Docker宿主機和容器之間檔案拷貝

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

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

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

最原始的copy方式管理資料:

宿主機檔案 copy to 容器內

docker cp 需要拷貝的檔案或者目錄   容器名稱:容器目錄

容器內 copy to 宿主機

docker cp 容器名稱:容器目錄    宿主機目錄

資料卷

資料卷(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

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

掛載資料卷,最好是通過run而非create/start建立啟動容器
create/start命令建立啟動容器後,再掛載資料卷相當麻煩,要修改很多配置檔案,但並非不可以
5.啟動一個掛載資料卷的容器

     ## demo1
     docker run -d \
       -it \
       --name mycentos02\
       --mount source=my-vol,target=/webapp3 \
       centos:7

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

docker run -d \
       -it \
       --name mycentos04\
       --mount type=bind,source=/root/javalxy/data,target=/root/webapp12 \
       centos:7    
   

注1:linux命令結尾加斜槓有什麼用
加了“\”意為將最後的回車換行給註釋了,系統理解為命令還沒有結束,因而是繼續等待使用者進行輸入,直到讀到結束符,如回車

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

注3:mount選項高階用法
–mount選項的type引數支援三種型別的資料卷
–mount標誌:由多個名值對組成,逗號分隔,每個鍵值由 = 元組組成

      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檔案就可以檢視效果了
over…

相關文章