目錄
前言
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進入。