云計算-9-Dokcer容器的數(shù)據(jù)管理

云計算-9-Dokcer容器的數(shù)據(jù)管理

什么是數(shù)據(jù)卷

數(shù)據(jù)卷是可以供一個或者多個容器使用的特殊目錄,它繞過UFS(UNIX文件系統(tǒng)),數(shù)據(jù)卷的設計目的,在于數(shù)據(jù)的持久化存儲,它完全獨立于容器的生命周期,所以在刪除docker容器的時候不會刪除其掛載的數(shù)據(jù)卷,也不存在類似垃圾收集機制,對容器掛載的數(shù)據(jù)卷進行處理。

數(shù)據(jù)卷有以下特點:

  • 數(shù)據(jù)卷在容器啟動的時候進行初始化,如果容器使用的進行在掛載點包含數(shù)據(jù),那么數(shù)據(jù)也會拷貝到初始化的數(shù)據(jù)卷中

  • 數(shù)據(jù)卷可以在容器之間進行共享或者重用

  • 可以對數(shù)據(jù)卷里面的內(nèi)容直接進行修改

  • 數(shù)據(jù)卷的變化不會影響鏡像的更新

  • 數(shù)據(jù)卷會一直存在,哪怕是掛載數(shù)據(jù)卷的容器被刪除

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

為容器添加數(shù)據(jù)卷

  • -v 宿主機絕對路徑:Docker容器內(nèi)部絕對路徑:叫掛載

我們還以centos為例:創(chuàng)建一個名為mycentos的容器,并且加載一個數(shù)據(jù)卷l在宿主機上的/centos/mydata,同步容器/data 目錄下數(shù)據(jù)

docker?run?-v?/centos/mydata:/data?-it?centos

此時已經(jīng)進入容器,然后進入到/data目錄

cd?/data

此時該路徑下不存在任何數(shù)據(jù),我們在該目錄下創(chuàng)建一個text.txt文件

touch?text.txt

然后我們在宿主機的查看/centos/mydata下文件也存在text.txt

因為數(shù)據(jù)卷是獨立存在的,所以此時我們刪除容器,數(shù)據(jù)卷還會存在

docker?rm?-f??$(docker?ps?-qa)?#?刪除所有容器
  • -v 不以/開頭的路徑:Docker容器內(nèi)部絕對路徑:叫綁定
docker?run?-v??mydata:/data?-it?centos

其他步驟和上面一致,然后我們使用docker inspect 容器名查看容器的信息

docker?inspect?youthful_swanson

發(fā)現(xiàn)在啟動容器的時候自動創(chuàng)建了一個volume。

創(chuàng)建一個數(shù)據(jù)卷

?docker?volume?create?mycentos

查看所有 數(shù)據(jù)卷

docker?volume?ls
docker volume inspect mycentos:查詢卷詳情

docker?volume?mycentos:?移除無用卷

為數(shù)據(jù)卷添加訪問權限

docker?run?-v?/centos/mydata:/data:ro?-it?centos

:ro給容器內(nèi)部添加只讀權限,這樣docker容器內(nèi)的目錄下就不能創(chuàng)建文件,只能在宿主機的/centos/mydata下創(chuàng)建文件。

使用Dockerfile構建包含數(shù)據(jù)卷的鏡像

指令格式:

volume["/test"]

dockerfile文件如下

FROM?nexus.gree.com/centos
VOLUME?["/mycentos1","/mycentos2"]
CMD?/bin/bash

構建鏡像

docker?build?-t??mycentos:v1??.

啟動鏡像,并進入容器

docker?run?--name?mycentos2?-it?mycentos:v1

查看容器目錄,發(fā)現(xiàn)容器下有兩個目錄,/mycentos1和/mycentos2

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

什么是數(shù)據(jù)卷容器

一個容器掛在數(shù)據(jù)卷,然后其他容器通過掛載這個容器實現(xiàn)數(shù)據(jù)共享,掛載數(shù)據(jù)卷的容器叫做數(shù)據(jù)卷容器

掛載數(shù)據(jù)卷容器的方法

docker?run?--volumes-from?[容器名]

舉例說明:

docker?run?--name?mycentos3?-it?mycentos:v1??#(mycentos鏡像是之前上面的dockerfile創(chuàng)建的)

mycentos:v1鏡像存在兩個數(shù)據(jù)卷mycentos1和mycentos2

進入容器后創(chuàng)建一個文件在數(shù)據(jù)卷mycentos1創(chuàng)建testcentos.txt

touch?/mycentos1/testcentos.txt

創(chuàng)建一個新的容器,掛載剛才mycentos3這個容器創(chuàng)建的數(shù)據(jù)卷

docker?run?--name?mycentos4??--volumes-from?mycentos3??-it?mycentos:v1

然后查看mycentos4容器的mycentos1數(shù)據(jù)卷下也存在testcentos.txt。

docker cp指令

Docker cp指令有兩種格式

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- :把容器里面的復制出來
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH:把外部的復制進去

OPTIONS說明:

  • **-L :**保持源目標中的鏈接

舉例說明

  • 將/mydata/test目錄拷貝到8899992容器的/mydata目錄下
docker?cp?/mydata/test?8899992:/mydata
  • 將容器8899992的/mydata目錄拷貝到主機/mydata目錄下
docker?cp??8899992:/mydata?/mydata/

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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