Docker中的數據能夠存儲在相似於虛擬機磁盤的介質中,在Docker中稱爲數據卷(Data Volume
)。數據卷能夠用來存儲Docker應用的數據,也能夠用來在Docker容器間進行數據共享。docker
數據卷呈現給Docker容器的形式就是一個目錄,支持多個容器間共享,修改也不會影響鏡像。使用Docker的數據卷,相似在系統中使用 mount 掛載一個文件系統。ubuntu
本節中,咱們須要依次完成下面幾項任務:bash
1、建立數據卷服務器
容器管理實驗中咱們學習的命令 docker run
用來建立容器,能夠在使用改命令時添加 -v
參數,就能夠建立並掛載一個到多個數據捲到當前運行的容器中,-v
的做用是將宿主機的一個目錄做爲容器的數據卷掛載到容器中,使宿主機和容器之間能夠共享一個目錄,若是本地路徑不存在,Docker也會自動建立。網絡
本節實驗中,咱們掛載2個數據捲到新建立的容器上:學習
# 建立兩個目錄 mkdir /tmp/data1 /tmp/data2 # 分別將兩個目錄掛載到新建立的容器上 docker run -t -i --name shiyanlou -v /tmp/data1:/data1 -v /tmp/data2:/data2 ubuntu /bin/bash
上述命令中 -v
參數可使用屢次,並掛在多個數據捲到容器中。後面的參數信息中冒號前面是宿主機的本地目錄,冒號後面是容器中的掛載目錄。spa
使用 docker inspect shiyanlou
查看shiyanlou容器中的數據卷信息:3d
#docker inspect shiyanlou
進入容器後咱們能夠查看和使用容器卷,嘗試向這個容器卷中寫入數據,而後在宿主機中查看是否存在:code
能夠看到容器中掛載的數據卷具有可寫權限,那麼如何對數據卷的權限進行管理呢?好比如何建立一個只讀的數據卷呢?blog
2、數據卷權限
掛載的數據卷默認爲可讀寫權限,除非外部文件系統作了特殊限制,在 docker run
的時候也能夠執行爲只讀
權限:
# 建立一個數據卷目錄 mkdir /tmp/readonlydata # 以只讀的方式掛載到shiyanlouro容器上 docker run -t -i --name shiyanlouro -v /tmp/readonlydata:/rodata:ro ubuntu /bin/bash
上面的命令中參數很簡單,ro
表示 readonly
,掛載後的數據卷就是隻讀權限了,這時候咱們再次嘗試向數據卷中寫入:
除了能夠掛載目錄以外,文件也能夠做爲數據卷掛載到容器中。
3、掛載宿主機上的文件
在本實驗中,咱們想讓全部的容器均可以共享宿主機的/etc/apt/sources.list
,從而只須要改變宿主機的apt源就可以影響到全部的容器。
docker run -t -i --name shiyanloufile -v /etc/apt/sources.list:/etc/apt/sources.list:ro ubuntu /bin/bash
若是咱們想共享一個數據卷給多個容器怎麼辦,好比設想一個場景,咱們有兩個處理上傳數據的應用運行在不一樣的容器中,但須要同時讀取同一個文件夾下的文件,此時,最好的方式是使用數據卷容器。
4、數據卷容器
若是須要在多個容器間共享數據,並但願永久保存這些數據,最好的方式是使用數據卷容器,相似於一個提供網絡文件共享服務的NFS服務器。
數據卷容器建立方法跟普通容器同樣,只須要指定宿主機的一個文件夾做爲數據卷便可,使用docker create
命令建立但不啓動數據卷容器:
docker create -v /shiyanloudata --name shiyanloudb ubuntu /bin/true
其餘使用該數據卷容器的容器建立時候須要使用--volumes-from
參數,指定該容器名稱或ID:
docker run --volumes-from shiyanloudb ...
建立site1和site2兩個容器掛載數據卷容器shiyanloudb:
能夠鏈接到這兩個容器中對數據捲進行操做,並查看彼此之間是否已經有了共享文件:
5、備份數據卷
繼續使用實驗四的環境,咱們對數據卷容器中的數據進行備份,備份方法:
請按照上述步驟對數據卷容器shiyanloudb中的數據進行備份:
# 建立備份目錄 mkdir /tmp/backup # 建立備份容器 docker run --rm --volumes-from shiyanloudb -v /tmp/backup:/backup ubuntu tar cvf /backup/shiyanloudb.tar /shiyanloudata
請務必保證本身可以動手完成整個實驗,只看文字很簡單,真正操做的時候會遇到各類各樣的問題,解決問題的過程纔是收穫的過程。