什么是容器數據卷技術?
到這里,我算是入門docker了!
docker的理念:將環境和應用打包成一個鏡像!直接安裝就能使用
如果數據都在容器中,那么我們一旦將容器刪除,數據就會丟失!因為你只讀層沒有更改,相當于就是鏡像層沒有改變
==需求:數據持久化==
比如你有一容器是MySQL,你一旦刪除這個mysql容器,里面數據丟失,那你相當于就是刪庫跑路,風險很大。==需求:這mysql的數據不要存儲在本地!==
容器之間可以有一個數據共享的技術,Docker容器中產生的數據,同步到本地!
我把容器刪除,但我們的數據不會丟失,其實就是目錄的掛載
將我們容器的目錄,掛載到我們的虛擬機上或者linux上面
卷就是目錄或者文件,存在與一個或中多個容器內,通過docker掛在到容器內,但不屬于聯合文件系統,提供持續存儲或共享數據的特性。
卷的目的就是數據的持續化,完全獨立于容器的生存周期,因此Docker不會在容器刪除時刪除其他掛載的數據卷
可以理解為容器內的數據持續的保存到我們宿主機的磁盤中。
容器數據卷技術能干什么?
1.數據卷可以在容器之間共享或重用數據
2.卷中的更改可以直接實時生效
3.數據卷中的更改不會包含在鏡像的更新中
4.數據卷的生命周期一直持續到沒有容器使用它為止。
相關的命令與參數
--privileged=true,權限擴容的意思,只有這個參數,這個容器內的root才會有root權限
docker run -d -p 8080:8080 -v /zzyyuse/mycentos/:/tem/centos --privileged=true centos7
-v /zzyyuse/mycentos/:/tem/centos --privileged=true(-v 宿主機的絕對路徑:容器內的路徑,放開權限)
數據卷案例
1.宿主機和容器內之間映射:保證數據同步
命令docker run -d
首先就是查看宿主機上tmp目錄文件,可以發現沒有
現在通過命令:
docker run -it --privileged=true -v /tmp/centos10:/tmp/centos10docker -
-name centos10 centos
創建這個數據卷成功
回宿主機上查看tmp目錄下,發現自動創建了一個centos10目錄
首先是宿主機上操作
我寫了一個hello docker內容的文件進入這個目錄
進入docker容器,發現這個文件也存在。這里并不能說明內容共享,只是單方面。
接著是在容器里面操作
追加一行代碼
在宿主機上打印
可以發現hello baby出現在容器內,這里結合上面內容可以說明數據卷的共享性
查看數據卷是否掛在成功,或者說掛載在哪里?
docker inspect 容器ID
現在我停止容器centos10
在宿主機上創建1.txt
啟動,進入這個centos10容器
發現也有1.txt文件,這就是掛載。
(2)容器卷的讀寫規則
我們上面使用的是默認規則,相互可以寫
但這里我們可以設置,宿主機只能讀,不能寫,或者容器內只能讀取
命令:docker run -it --privileged=true -v /tmp/centos10:/tmp/centos10docker:ro -
-name centos10 centos
解釋:ro = read only的意思
這里有點錯誤,無傷大雅
我想在容器里面創建hello文件,但是不可以,而在宿主機上面可以創建hello.txt,
(3)容器卷的繼承
1)先容器卷的創建
docker run -it --privileged=true -v /tmp/u1host:/tmp/u1docker --name u1 centos
docker容器 u1
宿主機
2)容器u2繼承容器u1的容器卷
docker run -it --privileged=true --volumes-from u1 --name u2 centos
這個參數中--volumes其實就是我們-v的完整名字
這里我touch創建了一個udocker的txt文件,看看u1是否也可以看見
這里你可以發現u1其實也是