詳解Docker容器數(shù)據(jù)卷
是什么
先來(lái)看看Docker的理念:
將運(yùn)用與運(yùn)行的環(huán)境打包形成容器運(yùn)行,運(yùn)行可以伴隨著容器,但是我們對(duì)數(shù)據(jù)的要求希望是持久化的容器之間希望有可能共享數(shù)據(jù)
Docker容器產(chǎn)生的數(shù)據(jù),如果不通過(guò)docker commit生成新的鏡像,使得數(shù)據(jù)做為鏡像的一部分保存下來(lái), 那么當(dāng)容器刪除后,數(shù)據(jù)自然也就沒(méi)有了。
為了能保存數(shù)據(jù)在docker中我們使用卷。
一句話:有點(diǎn)類(lèi)似我們Redis里面的RDB和AOF
能干嘛
卷就是目錄或文件,存在于一個(gè)或多個(gè)容器中,由docker掛載到容器,但不屬于聯(lián)合文件系統(tǒng),因此能夠繞過(guò)Union FileSystem提供一些用于持續(xù)存儲(chǔ)或共享數(shù)據(jù)的特性:
卷的設(shè)計(jì)目的就是數(shù)據(jù)的持久化,完全獨(dú)立于容器的生存周期,因此Docker不會(huì)在容器刪除時(shí)刪除其掛載的數(shù)據(jù)卷。
特點(diǎn):
- 數(shù)據(jù)卷可在容器之間共享或重用數(shù)據(jù)
- 卷中的更改可以直接生效
- 數(shù)據(jù)卷中的更改不會(huì)包含在鏡像的更新中
- 數(shù)據(jù)卷容器的生命周期一直持續(xù)到?jīng)]有容器使用它為止 (--volumes from)
總結(jié):
- 容器數(shù)據(jù)的持久化
- 容器間繼承+共享數(shù)據(jù)
數(shù)據(jù)卷
直接命令添加
docker run -it -v /宿主機(jī)絕對(duì)路徑目錄:/容器內(nèi)目錄 鏡像名 docker run -it -v /宿主機(jī)絕對(duì)路徑目錄:/容器內(nèi)目錄:ro 鏡像名 // 帶命令,指定訪問(wèn)權(quán)限, ro: read only
查看數(shù)據(jù)卷是否掛載成功:
docker inspect 容器ID


使用DockerFile添加
根目錄下新建mydocker文件夾并進(jìn)入
可在Dockerfile中使用VOLUME指令來(lái)給鏡像添加一個(gè)或多個(gè)數(shù)據(jù)卷

DockerFile 構(gòu)建
DockerFile的編寫(xiě)可以參考 DockerHub 中各鏡像的DockerFile文件,如tomcat:https://github.com/docker-library/tomcat/blob/300ac03f4696c761a81fa10afbb893f3368061de/8.5/jdk8/openjdk-buster/Dockerfile
#volume test FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finished,-------success1" CMD /bin/bash
build后生成鏡像

獲得一個(gè)新鏡像zzyy/centos
run容器

通過(guò)上述步驟,容器內(nèi)的卷目錄地址已經(jīng)知道,對(duì)應(yīng)的主機(jī)目錄在哪

備注:
Docker掛載主機(jī)目錄Docker訪問(wèn)出現(xiàn)cannot open directory,Permission denied
解決辦法:在掛載目錄后多加一個(gè)--privileged=true參數(shù)即可
數(shù)據(jù)卷容器
是什么
命名的容器掛載數(shù)據(jù)卷,其它容器通過(guò)掛載這個(gè)(父容器)實(shí)現(xiàn)數(shù)據(jù)共享,掛載數(shù)據(jù)卷的容器,稱(chēng)之為數(shù)據(jù)卷容器.
容器間傳遞共享(--volumes -from)
docker run -it --name dco2 --volumes-from dc01 zzyy/cenos // dc01是先創(chuàng)建的容器,dco2繼承dc01,實(shí)現(xiàn)數(shù)據(jù)共享
數(shù)據(jù)卷由父容器(dc01)掛載,如果在dc02,dc03掛載dc01后,刪除dc01,數(shù)據(jù)卷仍然會(huì)有效。
容器之間配置信息的傳遞,數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止。
總結(jié)
到此這篇關(guān)于Docker容器數(shù)據(jù)卷的文章就介紹到這了,更多相關(guān)Docker容器數(shù)據(jù)卷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- docker<容器數(shù)據(jù)卷-v>對(duì)容器內(nèi)數(shù)據(jù)持久化詳解(備份)
- Docker中容器數(shù)據(jù)卷詳解
- Docker容器數(shù)據(jù)卷的使用教程
- Docker容器數(shù)據(jù)卷技術(shù)介紹
- Docker容器數(shù)據(jù)卷介紹及操作示例
- docker中容器數(shù)據(jù)卷volume介紹
- docker容器數(shù)據(jù)卷之具名掛載和匿名掛載問(wèn)題
- Docker容器數(shù)據(jù)卷原理及使用方法解析
- 淺談Docker 容器數(shù)據(jù)卷掛載小結(jié)
- Docker中容器數(shù)據(jù)卷(Data Volume)和數(shù)據(jù)管理詳解
- Docker容器數(shù)據(jù)卷的基本操作
相關(guān)文章
淺談Docker-compose中的depends_on順序的問(wèn)題解決
本文主要介紹了淺談Docker-compose中的depends_on順序的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
docker容器日志占滿硬盤(pán)空間的問(wèn)題解決
由于默認(rèn)情況下,docker使用json-file類(lèi)型的日志驅(qū)動(dòng),該日志驅(qū)動(dòng)默認(rèn)情況下,每個(gè)容器的日志會(huì)一直追加在文件名為 containerId-json.log文件中,因此在容器不重建的情況下,該日志文件會(huì)一直追加內(nèi)容,直到占滿整個(gè)服務(wù)器硬盤(pán)空間,本文就來(lái)介紹一下解決方法2023-09-09
如何在docker中運(yùn)行springboot項(xiàng)目過(guò)程圖解
這篇文章主要介紹了如何在docker中運(yùn)行springboot項(xiàng)目過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Docker安裝MS?SQL?Server并使用Navicat遠(yuǎn)程連接的操作方法
SQL?Server支持廣泛的應(yīng)用程序開(kāi)發(fā)接口(API),包括T-SQL、ADO.NET、ODBC、OLE?DB等,并支持多種操作系統(tǒng),包括Windows、Linux和Docker等,這篇文章主要介紹了Docker安裝MS?SQL?Server并使用Navicat遠(yuǎn)程連接,需要的朋友可以參考下2023-06-06
docker如何部署帶有界面的registry倉(cāng)庫(kù)
這篇文章主要介紹了docker如何部署帶有界面的registry倉(cāng)庫(kù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
docker部署nodejs開(kāi)發(fā)環(huán)境詳細(xì)步驟(基礎(chǔ)示例篇)
這篇文章主要給大家介紹了docker部署nodejs開(kāi)發(fā)環(huán)境詳細(xì)步驟,docker是一個(gè)開(kāi)源的應(yīng)用容器引擎,可以為我們提供安全、可移植、可重復(fù)的自動(dòng)化部署的方式,需要的朋友可以參考下2023-10-10

