Docker容器數(shù)據(jù)卷

是什么

docker的理念將運行的環(huán)境打包形成容器運行,運行可以伴隨容器,但是我們對數(shù)據(jù)的要求是希望持久化,容器之間可以共享數(shù)據(jù),Docker容器產(chǎn)生的數(shù)據(jù),如果不通過docker commit生成新的鏡像,使得數(shù)據(jù)作為容器的一部分保存下來,那么當容器被刪除之后,數(shù)據(jù)也就沒了,為了能夠保存數(shù)據(jù),在docker容器中使用卷。卷就是目錄或者文件,存在于一個或者多個容器中,但是不屬于聯(lián)合文件系統(tǒng),因此能夠繞過Union File System提供一些用于持久化數(shù)據(jù)或共享數(shù)據(jù)的特點

能干嘛?

卷的設計目的就是數(shù)據(jù)的持久化,完全獨立與容器的生命周期,因此Docker不會在容器刪除時刪除其掛載的數(shù)據(jù)卷。
特點:
?? 1. 數(shù)據(jù)卷可以在容器之間共享和重用數(shù)據(jù)。
?? 2. 卷的更改可以直接生效。
?? 3. 數(shù)據(jù)卷的更改不會包含在鏡像的更新中。
?? 4. 數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止。
容器的持久化
容器間繼承+共享數(shù)據(jù)

數(shù)據(jù)卷
容器內(nèi)添加

?1.直接命令添加:
??命令
???docker run -it -v /宿主機絕對路徑目錄:/容器內(nèi)目錄?鏡像名


左邊為主機,右邊為容器

???查看數(shù)據(jù)卷是否掛載成功。
????使用docker imspect 容器ID,返回的json串有這么一串數(shù)據(jù)說明掛載成功。


使用命令

綁定成功

?容器和宿主機之間通信
相互讀寫

容器關閉后在宿主機更改文件,容器再次啟動數(shù)據(jù)仍然同步
關閉容器

宿主機新增文件

容器內(nèi)任然有數(shù)據(jù)

命令(帶權(quán)限)
??docker run -it -v /宿主機絕對路徑目錄:/容器內(nèi)目錄:ro 鏡像名??(read only)
??此時主機能對數(shù)據(jù)卷進行更改,但是容器不能對其更改,只允許讀。

DockerFile

hello.java ---- hello.class
hello images ---- images DockerFile
實際就是鏡像的描述。

2.DockerFile添加

  • 根目錄下新建mydocker文件夾并進入。

  • 在DockerFile中使用VOLUME指令給鏡像添加一個或者多個數(shù)據(jù)卷
    VOLUME["/dataVolumeContainer","dataVolumeContainer2","dataVolumeContainer3"]
    ??出于可移植和分享的考慮,用-v命令這種方法不能夠直在DockerFile中實現(xiàn),由于宿主機目錄是依賴于特定宿主機的,并不能保證所有的宿主機都存在這樣的特定目錄。

  • File構(gòu)建


    編寫DockerFile文件
  • build后生成鏡像-----獲得新的鏡像


    構(gòu)建鏡像

    也是一層一層的疊加,聯(lián)合文件系統(tǒng)

  • run容器


    運行容器

    可以看到已經(jīng)創(chuàng)建兩個數(shù)據(jù)卷,對應主機路徑


    主機對應的數(shù)據(jù)卷

Docker 掛載主機目錄Docker出項cannot open directory .:Permission denied
解決辦法:在掛載目錄后面 多加一個--privileged=true參數(shù)即可
docker run -it -v /mydatavolume:/datavolumecontainer --privileged=true 鏡像名

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

命名的容器掛載數(shù)據(jù)卷,其他的容器通過掛載這個容器(父容器)實現(xiàn)數(shù)據(jù)共享,掛載數(shù)據(jù)卷的容器,稱為數(shù)據(jù)卷容器

  • 以上一步新建的鏡像為模板運行容器dc01/dc02/dc03
    他們已經(jīng)具有容器卷/datavolumecontainer1和/datavolumecontainer2
  • 容器間傳遞共享(--volumes-from)

    ??啟動父容器dc01--在datavolumecontainer2中新增內(nèi)容
    啟動父容器并新建內(nèi)容

    ??dc01/dc02繼承自dc01(--volumes-from)
    dc02中有dc01新建的文件

    ??子容器創(chuàng)建文件父容器查看


    子容器新建的會影響父容器

    ??刪除父容器子容器數(shù)據(jù)保留,
    image.png

    容器之間配置信息的傳遞,數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容