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