云計算-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/