您好,登錄后才能下訂單哦!
本篇內容介紹了“docker容器數據卷怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
docker的理念回顧
將應用和環境打包成一個鏡像!
數據?如果數據都在容器中,那么我們容器刪除,那么數據就會丟失! 需求:數據可以持久化
如MySQL,容器刪了,就要跑路了! 需求:MySQL數據可以存儲在本地!
容器之間可以有一個數據共享的技術! Docker容器中產生的數據,同步到本地!
這就是卷技術!其實就是目錄的掛載,將我們容器內的目錄掛載到Linux上面!
總結一句話:容器的持久化和同步操作!容器間也是可以數據共享的!
方式一:直接使用命令來掛載 -v
docker run -it -v 主機目錄 : 容器內目錄
# 測試
[root@dockertest ~]# docker run -it -v /home/ceshi:/home centos /bin/bash
# 啟動起來后我們可以通過 docker inspect 容器id 查看掛載信息
1
1
測試文件的同步
再來測試!
1、停止容器
2、宿主機上修改文件
3、啟動容器
4、容器內的數據依舊是同步的!
好處:我們以后修改只需要在本地修改即可,容器內會自動同步!
思考:MySQL的數據持久化的問題!
# 獲取鏡像
[root@dockertest network-scripts]# docker pull mysql:5.7
# 運行容器。需要做數據掛載! # 安裝啟動mysql 需要配置密碼,這是要注意的一點。# 官方測試: docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
# 啟動我們的
-d 后臺運行
-p 端口映射
-v 數據卷掛載
-e 環境配置
--name 容器名字
[root@dockertest network-scripts]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
e669cf988dabeea812faa544be2511fe4a5ad0c250022afbd10081f304fe26d7# 啟動成功之后,我們在本地使用 sqlyog 來連接測試一下
# sqlyog--連接到服務器的3310 -- 3310 和容器內的 3306 映射,這個時候我們就可以連接上了!# 在本地測試創建一個數據庫,查看一下我們映射的路徑是否ok!
假設我們將容器刪除
發現,我們掛載到本地的數據卷依舊沒有丟失,這就實現了容器數據持久化功能!
# 匿名掛載
-v 容器內路徑!
docker run -d -P --name nginx01 -v /etc/nginx nginx
# 查看所有的 volume 的情況
[root@dockertest network-scripts]# docker volume ls
DRIVER VOLUME NAME
local 1b3548d552bdac0cd277157af18c5925903c509940bff9390326a29c1cc83fa2
local 310d040dc6743c5b7b68e2c3cae0399b8103a0144a63c6b1749694f69a17cd91
local f472a5ba40dc3d7ad4768ee56ea1cff57132fd6f847bb72fd4431c7bd499cede
# 這里發現,這種就是匿名掛載,我們在 -v 只寫了容器內的路徑,沒有寫容器外的路徑!# 具名掛載
[root@dockertest network-scripts]# docker run -d -P --name nginx02 -v qls-nginx:/etc/nginx nginx
acbf53630d19aa7fc614ac54e61c36e3dcbd4d9d914de640fc15f7f841d4959e
[root@dockertest network-scripts]# docker volume ls
DRIVER VOLUME NAME
local 1b3548d552bdac0cd277157af18c5925903c509940bff9390326a29c1cc83fa2
local 310d040dc6743c5b7b68e2c3cae0399b8103a0144a63c6b1749694f69a17cd91
local f472a5ba40dc3d7ad4768ee56ea1cff57132fd6f847bb72fd4431c7bd499cede
local qls-nginx# 通過 -v 卷名:容器內路徑
# 查看一下這個卷
所有的docker容器內的卷,沒有指定目錄的情況下都是在 /var/lib/docker/volumes/xxxx/_data
我們通過具名掛載可以方便的找到我們的卷,大多數情況使用 具名掛載
# 如何確定是具名掛載還是匿名掛載,還是指定路徑掛載!
-v 容器內路徑 # 匿名掛載
-v 卷名:容器內路徑 # 具名掛載
-v /宿主機路徑 :: 容器內路徑 # 指定路徑掛載!
拓展:
# 通過 -v 容器內路徑,ro rw 改變讀寫權限
ro readonly # 只讀
rw readwrite # 可讀可寫# 一旦設置了這個容器的權限,容器對我們掛載出來的內容就有限定了!
docker run -d -P --name nginx02 -v qls-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v qls-nginx:/etc/nginx:rw nginx
# ro 只要看到ro就說明這個容器只能通過宿主機來操作,容器內部是無法操作!
Dockerfile 就是用來構建 docker 鏡像的構建文件!命令腳本!先體驗一下!(commit可以構建,這里講的時方式二)
通過這個腳本可以生成鏡像,鏡像時一層一層的,所以腳本是一個一個的命令,每個命令都是一層。
# 創建一個dockerfile文件,名字可以隨意,建議起名為 Dockerfile
# 文件中的內容FROM centos VOLUME ["volume01","volume02"] CMD echo "----end----" CMD /bin/bash# 這里的每個命令,就是鏡像的一層。
# 啟動自己寫的容器
這個卷一定和外部有一個同步的目錄!
查看一下卷掛載的路徑
測試一下剛才的文件是否同步出去了
這種方式使用的很多,因為我們通常會構建自己的鏡像!
假設構建鏡像時候沒有掛載卷,要手動鏡像掛載 -v 卷名 : 容器內路徑!
如兩個mysql同步數據
# 啟動3個容器,通過我們剛才自己寫的鏡像啟動
# 測試:可以刪除docker01,查看一下docker02和03 是否還可以訪問這個文件
# 測試的結果,依舊可以訪問
多個mysql實現數據共享
[root@dockertest network-scripts]# docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
[root@dockertest network-scripts]# docker run -d -p 3310:3306l -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7
# 這個時候可以實現兩個容器數據同步!
“docker容器數據卷怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。