1. 程式人生 > >跟我一起學docker(六)--數據管理

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

修改 ubun 數據 image db2 ria 本地 afa 解壓

1.數據卷

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

數據卷可以在容器之間共享和重用

數據卷修改會立即生效

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

如果有容器使用數據卷,該卷會一直存在

準備工作:

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

技術分享圖片

在容器內創建數據卷

在使用docker run的命令時,使用 -v 標記可以在容器內創建一個數據卷,並且可以指定掛在一個本地已有的目錄到容器中作為數據卷:

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


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