跟我一塊兒學docker(六)--數據管理

1.數據卷web

數據卷是一個可供容器使用的特殊目錄,有以下特性:docker

數據卷能夠在容器之間共享和重用ubuntu

數據卷修改會當即生效bash

數據卷的更新不會影響鏡像app

若是有容器使用數據卷,該卷會一直存在webapp

準備工做:this

建立一個目錄,並在目錄裏面建立文件,文件內寫入內容。3d


在容器內建立數據卷cdn

在使用docker run的命令時,使用 -v 標記能夠在容器內建立一個數據卷,而且能夠指定掛在一個本地已有的目錄到容器中做爲數據卷:blog

docker run -d --name app1-it -v ${PWD}/webapp:/root/webapp ubuntu bash

經過目錄跟容器內創建了一層關係,數據捲髮生變化後,容器內和容器外都會隨之發生改變。例如容器掛載一個文件,當容器掛了後,文件不會丟失。

注意:默認掛載的數據卷的權限是rw(可讀寫),若是要求ro(只讀),則須要加上對應的ro參數,命令可改成:

docker run -d --name app1-it -v ${PWD}/webapp:/root/webapp:ro ubuntu bash

下面咱們一塊兒來操做一下:

建立webapp目錄,在目錄下新建文件file,並在文件file中寫入「this is a file」。


echo ${PWD} 命令標識當前目錄。


建立啓動app1容器並掛載數據卷


進入容器找到root目錄可查看到已掛載的數據卷。


數據卷目錄與容器內目錄有映射關係,因此無論是在容器內部修改數據卷仍是在外部修改數據卷,相對應的數據卷都會發生改變。


只讀的演示


2.數據卷容器

數據卷容器用於用戶須要在容器間共享一些持續更新的數據,數據卷容器專門提供數據卷供其它容器掛載使用。

Example:

建立數據卷容器db1

docker run -d --name db1 -v/dbdata -ti ubuntu bash

建立容器db2與db1共享dbdata的數據

docker run -d --name db2 --volumes-from db1 -ti ubuntu bash

在容器db1和容器db2任意一個容器修改dbdata的內容,在兩個容器內均生效

數據卷容器的刪除:

若是刪除了掛載的容器,數據卷並不會被自動刪除,若是要刪除一個數據卷,必須在刪除最後一個還掛載它的容器時顯示使用docker rm -v 命令指定同時刪除關聯的容器。在下圖可看到即便刪除aatest,bbtest中仍然有fileA文件。

在aatest中建立了文件fileA,bbtest能夠看到fileA,刪除aatest容器後,fileA在bbtest中還能夠看到。

能夠利用數據卷容器對其中的數據捲進行備份、恢復,以實現數據的遷移。

備份:

使用下面的命令來備份dbdata數據卷容器內的數據卷:

docker run --volumes-from dbdata -v ${PWD}:/backup --name worker ubuntu \tar cvf /backup/backup.tar/dbdata

說明:

利用ubuntu鏡像建立一個容器worker。使用--volumes-from dbdata參數來讓worker容器掛載dbdata的數據卷;使用${pwd}:/backup參數來掛載本地目錄到worker容器的/backup目錄。

worker啓動後,使用tar命令將/dbdata下的內容備份爲容器內的/backup/backup.tar。

建立dbdata數據卷容器並寫入文件:fileA、fileB、fileC

執行備份命令建立備份tar包:

恢復:

若是恢復數據到一個容器,能夠參照下面的操做。首先建立一個帶有數據卷的容器dbdata2:

docker run -d -v /dbdata--name dbdata2 ubuntu /bin/bash

而後建立另外一個新的容器,掛載dbdata2的容器,並使用tar命令解壓備份文件到掛載的容器卷中便可:

docker run --volumes-from dbdata2 -v ${pwd}:/backup ubuntu tar xvf /backup/backup.tar


相關文章
相關標籤/搜索