docker之數據卷和數據卷容器

前言

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

那麼數據管理策略的方式有三種:
1、原始的copy到容器中
2、創建數據卷目錄用來關聯容器,數據是雙向綁定的
3、創建數據卷容器,聯繫其他容器,數據是雙向綁定的


一、原始的copy到容器中

語法:docker cp 需要拷貝的文件或者目錄 容器名稱:容器目錄

docker cp /liwangwang/tomcat/ mycentos01:/javawwl/software

安裝語法來就行,把宿主機的文件或內容放入到容器中。

ps:在放入容器的什麼地方記得必須得保證有這個文件

在這裏插入圖片描述

二、創建數據卷目錄用來關聯容器,(數據是雙向綁定的)

先看一組圖片:

在這裏插入圖片描述

根據上面的圖解,應該已經講解了一半的問題了。
怎麼說,
在上面傳統的方法中,那僅僅是把文件copy過去了,
在這個方法中,是在宿主機上建好數據卷,把數據卷給掛載到其他容器上,以實現數據雙向綁定。


1、創建數據卷

創建一個數據卷

docker volume create 名字

查看所有數據卷信息

docker volume ls

查看單個數據卷的詳情

docker volume inspect 名字

在這裏插入圖片描述


2、掛載到容器上

在掛載之前我們做一個測試:
在這裏插入圖片描述

好了,準備工作做好了。

其實最簡單的掛載方式就是在啓動容器的時候掛載上去就行了
1、語法:

   docker run -d \
       -it \
       --name tomcat01 \
       --mount source=my-vol,target=/webapp \
       centos:7
	   
注意:此行命令執行後的效果是,宿主機路徑/var/lib/docker/volumes/my-vol/_data與tomcat01容器路徑/webapp完成映射

2、語法:

   docker run -d \
       -it \
       --name tomcat01 \
       --mount type=bind,source=/javawwl,target=/webapp \
       centos:7
	   
注意:此行命令執行後的效果是,宿主機路徑/javawwl與tomcat01容器路徑/webapp完成映射

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

當然也可以看下面的:

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

在這裏插入圖片描述
查看一下結果:
在這裏插入圖片描述

在這個時候就已經搭好了雙向綁定,可以自行測試;

		  :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


3、刪除數據卷

語法:

docker volume rm 名字

三、創建數據卷容器,聯繫其他容器,(數據是雙向綁定的)

look this:
在這裏插入圖片描述

就是連接到其他容器的一個關聯數據卷容器。

ok,上面的雙向綁定的概念已經講明白了,所以下面爲了不太複雜,所以就寫如何實現代碼

1、新建數據卷容器

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

在這裏插入圖片描述

2、新建依賴於數據卷容器的容器

語法:

  docker run -di --name 名字--volumes-from 數據卷容器 centos:7
  進入:
  docker exec -it db1 bash

在這裏插入圖片描述

同樣方法創建另一個db2。

方法如上面一樣自行測試即可
然後進行測試:

在這裏插入圖片描述

後記

這裏有個小東西要給大家講一下:
如果是用-di 啓動的容器是沒辦法用 attach 進入到容器的,會卡死。
但是可以用 docker exec -it 名字 bash 進入

如果是用-it 啓動的容器是沒有問題的,依然可以用attach進入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章