Docker之快速搞定容器數(shù)據(jù)卷

      網(wǎng)友投稿 1027 2022-05-29

      前面我們介紹了鏡像和容器,通過(guò)鏡像我們可以啟動(dòng)多個(gè)容器,但是我們發(fā)現(xiàn)當(dāng)我們的容器停止獲取刪除后,我們?cè)谌萜髦械膽?yīng)用的一些數(shù)據(jù)也丟失了,這時(shí)為了解決容器的數(shù)據(jù)持久化,我們需要通過(guò)容器數(shù)據(jù)卷來(lái)解決這個(gè)問(wèn)題,本文我們就來(lái)介紹下容器數(shù)據(jù)卷。

      1.是什么

      docker容器產(chǎn)生的數(shù)據(jù),如果不通過(guò)docker commit生成新的鏡像,使得數(shù)據(jù)做為鏡像的一部分保存下來(lái),那么當(dāng)容器刪除后,數(shù)據(jù)自然也就沒(méi)有了。為了能保存數(shù)據(jù)在docker中我們使用卷。簡(jiǎn)單來(lái)說(shuō),容器卷就相當(dāng)于Redis中持久化方式的RDB和AOF。

      2.解決了什么問(wèn)題

      卷就是目錄或文件,存在于一個(gè)或多個(gè)容器中,由docker掛載到容器,但不屬于聯(lián)合文件系統(tǒng),因此能夠繞過(guò)Union File System提供一些用于持續(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)]有容器使用它為止

      持久化,容器間繼承和共享數(shù)據(jù)

      3.數(shù)據(jù)卷

      首先我們來(lái)看看數(shù)據(jù)卷的使用方式

      Docker之快速搞定容器數(shù)據(jù)卷

      3.1 直接命令添加

      3.1.1 掛載數(shù)據(jù)卷

      添加的命令

      docker run -it -v /宿主機(jī)絕對(duì)路徑:/容器內(nèi)目錄 鏡像名

      1

      我們發(fā)現(xiàn)執(zhí)行了該命令后,在宿主機(jī)中會(huì)添加mydatavolume文件夾,同時(shí)在容器中的根目錄中也有了datavolumecontainer文件夾。

      這表示數(shù)據(jù)卷掛載成功了。同時(shí)我們也可以通過(guò)前面介紹的 docker inspect 容器名稱(chēng)ID來(lái)查看容器的 json數(shù)據(jù)

      3.1.2 數(shù)據(jù)共享操作

      數(shù)據(jù)卷掛載成功后,我們來(lái)看看容器和宿主機(jī)之間的數(shù)據(jù)共享,我們先在宿主機(jī)的mydatavolume目錄中創(chuàng)建一個(gè)文件。然后到容器的datavolumecontainer目錄中查看是否有相同的文件,然后我們?cè)俜催^(guò)來(lái)測(cè)試。

      然后我們發(fā)現(xiàn)在容器中也有了相同的文件,而且內(nèi)容也一致。反過(guò)來(lái)

      這就說(shuō)明容器和宿主機(jī)中的數(shù)據(jù)實(shí)現(xiàn)了數(shù)據(jù)共享

      3.3.3 容器停止數(shù)據(jù)共享

      接下來(lái)我們把容器停止掉,然后在宿主機(jī)中更新數(shù)據(jù),然后啟動(dòng)容器我們看看數(shù)據(jù)是否還能同步。

      更新宿主機(jī)中的數(shù)據(jù)

      啟動(dòng)原來(lái)的容器查看。

      3.3.4 權(quán)限管理

      前面我們介紹的共享的權(quán)限是在容器中具有讀寫(xiě)的權(quán)限。通過(guò)docker inspect 容器ID 我們也可以看到

      我們可以修改該權(quán)限

      docker run -it -v /宿主機(jī)絕對(duì)路徑:/容器內(nèi)目錄:ro 鏡像名

      1

      查看狀態(tài)

      宿主機(jī)添加文件

      容器中查看

      創(chuàng)建文件或者修改文件會(huì)失敗

      3.2 DockerFile添加

      DockerFile下篇文章我們會(huì)專(zhuān)門(mén)來(lái)介紹,此處我們先來(lái)使用看看效果。

      3.2.1 mydocker文件夾

      在根目錄下創(chuàng)建mydocker文件夾

      3.2.2 VOLUM指令

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

      1

      說(shuō)明:

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

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

      3.2.3 File構(gòu)建

      構(gòu)建File文件

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

      1

      2

      3

      4

      5

      6

      7

      8

      9

      3.2.4 build新鏡像

      docker build -f /mydocker/dockerfile1 -t bobokaoya/centos .

      1

      3.2.5 run一個(gè)新容器

      根據(jù)上面新創(chuàng)建的鏡像我們來(lái)run一個(gè)新容器

      那么如此一來(lái),對(duì)應(yīng)的宿主機(jī)的映射地址在哪呢?docker inspect 容器ID來(lái)查看

      容器的 共享目錄中創(chuàng)建 文件。

      去宿主中的映射目錄中查看

      搞定~

      注意

      Docker掛載主機(jī)目錄Docker訪(fǎng)問(wèn)出現(xiàn)cannot open directory .: Permission denied

      解決辦法:在掛載目錄后多加一個(gè)–privileged=true參數(shù)即可

      4.數(shù)據(jù)卷容器

      命名的容器掛載數(shù)據(jù)卷,其它容器通過(guò)掛載這個(gè)(父容器)實(shí)現(xiàn)數(shù)據(jù)共享,掛載數(shù)據(jù)卷的容器,稱(chēng)之為數(shù)據(jù)卷容器,我們?cè)谇懊娴陌咐A(chǔ)上來(lái)介紹

      4.1 啟動(dòng)一個(gè)父容器

      docker run -it --name dc01 bobokaoya/centos

      1

      然后在共享目錄中創(chuàng)建文件

      4.2 創(chuàng)建兩個(gè)子容器

      創(chuàng)建dc02

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

      1

      同時(shí)在dc02中修改了文件

      我們?cè)趧?chuàng)建dc03容器,同時(shí)繼承dc01

      docker run -it --name dc03 --volumes-from dc01 bobokaoya/centos

      1

      我們發(fā)現(xiàn)dc03中也看到dc02修改的數(shù)據(jù),說(shuō)明共享是成功的。

      4.3 刪除dc01,查看dc02和dc03是否共享

      我們停掉dc01并刪除,dc02和dc03之間的數(shù)據(jù)還是共享的

      dc02修改,然后查看dc03

      結(jié)論:容器之間配置信息的傳遞,數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止.

      Docker 容器

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Java的原子操作
      下一篇:【七天入門(mén)Go語(yǔ)言】 文件 && 包 | 第五天
      相關(guān)文章
      亚洲最大的成网4438| 亚洲香蕉久久一区二区| 四虎亚洲精品高清在线观看| 亚洲国产美女精品久久久久∴| 亚洲男人的天堂在线va拉文| 亚洲AⅤ视频一区二区三区| 亚洲AV无码一区二区一二区| 亚洲乱码日产精品BD在线观看| 亚洲永久中文字幕在线| 亚洲人成网网址在线看| 亚洲国产成+人+综合| 亚洲第一永久在线观看| 亚洲一区无码中文字幕乱码| 亚洲中文字幕在线无码一区二区| 亚洲人成电影青青在线播放| 亚洲av永久无码精品天堂久久| 亚洲人成电影网站久久| 亚洲精品无码日韩国产不卡av| 亚洲av无码有乱码在线观看| 亚洲a∨无码精品色午夜| 伊在人亚洲香蕉精品区麻豆| 亚洲成A人片77777国产| 久久久久亚洲av成人无码电影| 中文字幕人成人乱码亚洲电影| 国产亚洲精品自在久久| 亚洲国产一区二区a毛片| 亚洲精品视频免费看| 亚洲va在线va天堂va手机| 亚洲综合色一区二区三区| 亚洲人成欧美中文字幕| 美国毛片亚洲社区在线观看| 亚洲成a人片在线观看久| 亚洲熟妇少妇任你躁在线观看无码| 国产成人亚洲精品狼色在线| 亚洲爆乳无码一区二区三区| 亚洲黄色免费观看| 亚洲综合精品第一页| 亚洲国产精品国产自在在线| 亚洲精品国产美女久久久| 91精品国产亚洲爽啪在线观看| 亚洲国产最大av|