Docker數據管理

       容器中數據管理主要有兩種方式:node

       數據卷(Data Volumes):容器內數據直接映射到本地主機地址;python

       數據卷容器(Data Volume Containers):使用特定容器維護數據卷。web

1、數據卷

       數據卷是一個可供容器使用的特殊目錄,它將主機操做系統目錄直接映射進容器。docker

       特性:ubuntu

       1) 數據卷能夠在容器之間共享和重用,容器間傳遞數據將變得高效方便;安全

       2) 對數據卷內數據的修改會立馬生效,不管是容器內操做仍是本地操做;bash

       3) 對數據卷的更新不會影響鏡像,解耦了應用和數據;app

       4) 卷會一直存在,直到沒有容器使用,能夠安全地卸載它。webapp

一、在容器內建立一個數據卷

       運行docker run命令時,使用-v便可在容器內建立一個數據卷。屢次重複使用-v能夠建立多個數據卷。例如:工具

       docker run -d -P --name web -v /webapp training/webapp python app.py

       -P是將容器服務暴露的端口,是自動映射到本地主機的臨時端口。

二、掛載一個主機目錄做爲數據卷(推薦)

       docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

       用戶能夠將一些程序或數據放到本地目錄中,而後在容器內運行和使用。本地目錄的路徑必須是絕對路徑,若是目錄不存在,Docker會自動建立。Docker掛載數據卷的默認權限是讀寫(rw),用戶也能夠經過ro指定爲只讀。例如:

       docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py

三、掛載一個本地主機文件做爲數據卷(不推薦)

       docker run --rm -it -v ~/.bash_history://.bash_history ubuntu /bin/bash

       若是直接掛載一個文件到容器,使用文件編輯工具,包括vi或者sed --in-place的時候,可能會形成文件inode的改變,從Docker 1.1.0起,會致使報錯。

2、數據卷容器

       若是用戶須要在多個容器之間共享一些持續更新的數據,可使用數據卷容器。數據卷容器也是一個容器,它的目的是專門用來提供數據卷供其餘容器掛載。

       首先建立一個數據卷容器,並在其中建立一個數據卷掛載到本地目錄,而後在其餘容器中使用--volumes-from來掛載數據卷容器中的數據卷。每個容器任何一方在該目錄下寫入,其餘容器均可以看到。此外,還能夠從其餘已經掛載了容器卷的容器來掛載數據卷。

       (使用--volumes-from參數所掛載數據卷的容器自身並不須要保持在運行狀態)

       若是刪除了掛載的容器,數據卷並不會被自動刪除。若是要刪除一個數據卷,必須在最後一個還掛載着它的容器時顯式使用docker rm -v命令來指定同時刪除關聯的容器。

3、利用數據卷容器遷移數據

一、備份

       docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata

       ① 首先利用ubuntu鏡像建立了一個容器worker,使用--volumes-from dbdata參數來讓worker容器掛載dbdata容器的數據卷,使用-v $(pwd):/dbdata參數來掛載本地的當前目錄到worker容器的/backup目錄。

       ② worker容器啓動後,使用了tar cvf/backup/backup.tar /dbdata來將/dbdata下內容備份爲容器內的/backup/backup.tar,即宿主主機當前目錄下的backup.tar。

二、恢復

       首先建立一個帶有數據卷的容器dbdata2

       docker run -v /dbdata --name dbtada2 ubuntu /bin/bash

       而後建立另外一個新的容器,掛載dbdata2的容器,並使用untar解壓備份文件到所掛載的容器卷中

       docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

相關文章
相關標籤/搜索