Docker容器數據卷

      網友投稿 832 2025-04-03

      是什么?


      先來看看Docker的理念:

      將運用與運行的環境打包形成容器運行 ,運行可以伴隨著容器,但是我們對數據的要求希望是持久化的

      容器之間希望有可能共享數據

      Docker容器產生的數據,如果不通過docker commit生成新的鏡像,使得數據做為鏡像的一部分保存下來,

      那么當容器刪除后,數據自然也就沒有了。

      為了能保存數據在docker中我們使用卷。

      一句話:有點類似我們Redis里面的rdb和aof文件

      能干嘛

      卷就是目錄或文件,存在于一個或多個容器中,由docker掛載到容器,但不屬于聯合文件系統,因此能夠繞過Union File System提供一些用于持續存儲或共享數據的特性:

      卷的設計目的就是數據的持久化,完全獨立于容器的生存周期,因此Docker不會在容器刪除時刪除其掛載的數據卷

      特點:

      1:數據卷可在容器之間共享或重用數據

      2:卷中的更改可以直接生效

      3:數據卷中的更改不會包含在鏡像的更新中

      4:數據卷的生命周期一直持續到沒有容器使用它為止

      容器的持久化

      容器間繼承+共享數據

      數據卷

      容器內添加

      直接命令添加

      命令:

      docker run -it -v /宿主機目錄:/容器內目錄 centos /bin/bash

      -v表示volume,卷

      docker run -it -v /宿主機絕對路徑目錄:/容器內目錄 鏡像名

      案例:在宿主機上和centos鏡像之間新建文件夾互通

      docker run -it -v /myDataVolum:/dataVolumContainer centos /bin/bash

      可以看出命名執行完就進入到一個鏡像名為a82ff6c30fbb的centos下,查看centos下有dataVolumContainer這個新建的文件夾

      進入到宿主機,發現也會新建個myDataVolum,這兩個文件夾中的數據是互通的

      查看數據卷是否掛載成功

      docker inspect 容器ID

      docker inspect a82ff6c30fbb

      容器和宿主機之間數據共享

      案例:測試宿主機和容器是否共享數據

      在宿主機新建一個a.txt文件

      容器中寫入數據,如:hello docker!

      在宿主機上查看寫入的內容:

      容器停止退出后,主機修改后數據是否同步

      案例:先exit退出容器,在宿主機新建文件并寫入數據。然后再重新啟動容器,看寫入的數據是否同步。

      新建b.txt文件,寫入:test

      docker ps -l -l :顯示最近創建的容器。

      啟動centos鏡像

      docker start a82ff6c30fbb docker attach a82ff6c30fbb

      數據一致:

      命令(帶權限)

      docker run -it -v /宿主機絕對路徑目錄:/容器內目錄:ro 鏡像名

      ro:表示只讀不可寫

      RW:表示讀寫

      結論:設置上述的權限時(設置ro),在共享文件夾中,容器中只能查看不能寫入

      DockerFile添加

      進入dockerhub下載鏡像:https://hub.docker.com/

      docker hub打開的太慢了,可以去github上的搜索鏡像:https://github.com/docker-library/

      如:tomcat鏡像的docker file :https://github.com/dockerlibrary/tomcat/blob/master/8.5/jdk8/openjdk/Dockerfile

      根目錄下新建mydocker文件夾并進入,搜索tomcat,在tomcat的docker file里發現有OpenJDK,所以這也是為什么tomcat鏡像包這么大了。

      docker下載的鏡像都有一個特點就是這些鏡像都是小型化的Linux系統

      docker file里的 “ \ ”是連接符,一行寫不下所以需要換行

      docker file就是鏡像模板的描述文件

      案例

      mkdir mydocker cd mydocker

      可在Dockerfile中使用VOLUME指令來給鏡像添加一個或多個數據卷

      VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]

      說明:

      出于可移植和分享的考慮,用-v 主機目錄:容器目錄這種方法不能夠直接在Dockerfile中實現。

      由于宿主機目錄是依賴于特定宿主機的,并不能夠保證在所有的宿主機上都存在這樣的特定目錄。

      File構建

      在centos鏡像的根目錄里新建兩個容器卷,并且打印出一段話

      # volume test FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finished,--------success1" CMD /bin/bash

      build后生成鏡像,參數 -f 表示docker file的路徑,-t 是命名空間,最后面一個點 “.” ,表示在當前目錄下,如果在當前目錄下可以不加參數 -f

      鏡像是一層套一層的,類似于花卷,上面的docker file的第一層是centos,第二層是容器卷。我們只訪問最外層。

      獲得一個新鏡像zzyy/centos

      docker build -f /mydocker/Dockerfile -t xdr630/centos .

      運行后一層一層執行,以容器內的centos鏡像為根本,就可以創建另外一個自定義的centos鏡像。

      現在直接運行剛才創建的容器,一運行就會直接在xdr630/centos 下創建兩個容器卷

      docker images 容器名 可以查詢images下是否有這個容器,如:

      run容器

      Docker容器數據卷

      docker run -it xdr630/centos

      在自定義的centos的容器卷1中創建a.txt并且寫入 hello Docker!

      容器內有兩個容器卷,沒有指定對應的宿主機上的路徑。但docker會有默認的對應的路徑

      這里注意的是最新版的centos鏡像中默認對應的宿主機的路徑在“Mounts”值中

      復制上述的路徑,在宿主機上查看,又實現了宿主機到容器的數據可以是共享的

      通過上述步驟,容器內的卷目錄地址已經知道對應的主機目錄地址哪??

      主機對應默認地址

      最新版本的宿主機默認對應的路徑為:

      /var/lib/docker/volumes/75326a87e1affc3eb80ed150430ff4aaa11c1d55ddc333f3fe0754098b964486/_data

      備注

      Docker掛載主機目錄Docker訪問出現cannot open directory .: Permission denied

      解決辦法:在掛載目錄后多加一個–privileged=true參數即可

      數據卷容器

      是什么?

      命名的容器掛載數據卷,其它容器通過掛載這個(父容器)實現數據共享,掛載數據卷的容器,稱之為數據卷容器

      總體介紹

      以上一步新建的鏡像zzyy/centos為模板并運行容器dc01/dc02/dc03

      它們已經具有容器卷

      /dataVolumeContainer1

      /dataVolumeContainer2

      容器間傳遞共享(–volumes-from)

      先啟動一個父容器dc01

      這里的 --name 是自己自定義的名字,默認不寫的話是docker隨機給的名

      在dataVolumeContainer2新增內容

      dc02/dc03繼承自dc01

      –volumes-from

      命令

      docker run -it --name dc02 --volumes-from dc01 xdr630/centos

      發現有剛才新增的文件

      dc02/dc03分別在dataVolumeContainer2各自新增內容

      回到dc01可以看到02/03各自添加的都能共享了

      刪除dc01,dc02修改后dc03可否訪問

      刪除dc02后dc03可否訪問

      再進一步

      新建dc04繼承dc03后再刪除dc03

      結論:容器之間配置信息的傳遞,數據卷的生命周期一直持續到沒有容器使用它為止

      Docker

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:兩個word文檔合并(兩個word文檔合并頁碼不變)
      下一篇:行高怎么改(行高怎么改word)
      相關文章
      亚洲综合色成在线播放| 久久精品国产亚洲AV麻豆网站| 久久99国产亚洲精品观看| 国产精品亚洲精品爽爽| 亚洲av永久无码精品网址| 亚洲a∨无码一区二区| 亚洲国产欧美日韩精品一区二区三区 | 亚洲精品视频在线观看你懂的| 九九精品国产亚洲AV日韩| 亚洲av成本人无码网站| 免费观看亚洲人成网站| 亚洲精品tv久久久久久久久久| 亚洲精品成人久久久| 国产精品亚洲色图| 亚洲国产精品一区二区九九 | 亚洲美女视频一区| 亚洲国产精品人久久电影| 亚洲国产激情在线一区| 亚洲日韩一区精品射精| 午夜在线a亚洲v天堂网2019| 亚洲综合精品伊人久久| 亚洲乱码国产乱码精华| 四虎精品亚洲一区二区三区| 久久久久亚洲AV无码专区桃色| 亚洲乱码一区二区三区在线观看| 亚洲国产精品一区二区第一页| 亚洲好看的理论片电影| 亚洲男女性高爱潮网站| 亚洲中文无码永久免| 内射无码专区久久亚洲| 红杏亚洲影院一区二区三区| 久久精品国产精品亚洲色婷婷| 亚洲精品在线免费观看| 亚洲熟女综合色一区二区三区| 久久久亚洲精华液精华液精华液| 亚洲午夜无码片在线观看影院猛| 亚洲区小说区激情区图片区| 911精品国产亚洲日本美国韩国| 亚洲高清一区二区三区| 亚洲国产成人久久综合一区77 | 亚洲中文字幕人成乱码|