Docker 基礎 : 數據管理

原文: Docker 基礎 : 數據管理

用戶在使用 Docker 的過程當中,每每須要能查看容器內應用產生的數據,或者須要把容器內的數據進行備份,甚至多個容器之間進行數據的共享,這必然涉及容器的數據管理操做。容器中管理數據主要有兩種方式:數據卷(Data Volumes),數據卷容器(Data Volume Containers)。html

數據卷

數據卷是一個可供容器使用的特殊目錄,它繞過文件系統,能夠提供不少有用的特性:
1.    數據卷能夠在容器之間共享和重用。
2.    對數據卷的更改會當即生效。
3.    對數據卷的更新不會影響鏡像。
4.    數據卷會一直存在,直到沒有容器使用。python

數據卷的使用,相似於 linux 下對目錄或文件進行 mount 操做。linux

在容器內建立一個數據卷

在用 docker run 命令的時候,使用 -v 標記能夠在容器內建立一個數據卷。屢次使用 -v 標記能夠建立多個數據卷。web

下面的例子中咱們使用 myimg/webapp 鏡像建立一個 web 容器,並建立一個數據卷掛載到容器的 /webdata 目錄。docker

$ sudo docker run -d -P –name web -v /webdata myimg/webapp python app.py

掛載一個主機目錄做爲數據卷

使用 -v 標記也能夠指定掛載一個本地的已有目錄到容器中去做爲數據卷:ubuntu

$ sudo docker run -d -P –name web -v /var/data:/opt/webdata myimg/webapp python app.py

上面的命令掛載主機的 /var/data 目錄到容器的 /opt/webdata 目錄。bash

這個功能在接下測試的時候特別方便,好比用戶能夠放置一些程序或數據到本地目錄中,而後在容器中使用。另外,本地目錄的路徑必須是絕對路徑,若是目錄不存在,Docker 會自動建立。
Docker 掛載數據卷的默認權限是可讀寫(rw),用戶也能夠經過 ro 標記指定爲只讀:app

$ sudo docker run -d -P –name web -v /var/data:/opt/webdata:ro myimg/webapp python app.py

加了 :ro 以後,容器內掛載的數據卷內的數據就變成只讀的了。webapp

掛載一個本地主機文件做爲數據卷

-v 標記也能夠掛載一個主機中的文件到容器中做爲數據卷,可是這樣作會帶來一些問題。建議仍是掛載文件所在的目錄。測試

數據卷容器

若是用戶須要在容器之間共享一些持續更新的數據,最簡單的方式是使用數據卷容器。數據卷容器其實就是一個普通的容器,專門用它提供數據卷供其餘容器掛載。下面簡單介紹其使用方法。

首先要建立一個數據卷容器 mydata,並在其中建立一個數據卷掛載到 /data 目錄。

$ sudo docker run -it -v /data –name mydata ubuntu

而後在其餘容器中使用 --volumes-from 來掛載 mydata 容器中的數據卷。例如建立兩個容器 mycon1 和 mycon2,並從 mydata 容器掛載數據卷:

$ sudo docker run -it --volumes-from mydata –name mycon1 ubuntu
$ sudo docker run -it --volumes-from mydata –name mycon2 ubuntu

(注意,命令中沒有指定數據卷的信息,也就是說新容器中掛載數據卷的目錄和源容器中是同樣的。)

此時容器 mycon1 和 mycon2 都掛載同一個數據捲到相同的目錄 /data。三個容器任何一個在該目錄下寫入數據其餘容器都能看到。
能夠屢次使用 --volumes-from 參數來從多個容器掛載多個數據卷。還能夠從其餘已經掛載了容器的容器來掛載數據卷。而且使用 --volumes-from 參數所掛載數據卷的容器自身並不須要保持在運行狀態。
但刪除掛載了數據卷的容器時,數據卷並不會被自動刪除。若是要刪除一個數據卷,必須在刪除最後一個還掛載着它的容器時顯式的使用 docker rm -v 命令來指定同時刪除關聯的容器。
使用數據卷容器可讓用戶在容器之間自由的升級和移動數據卷,下面會進行詳細的介紹。

利用數據卷容器遷移數據

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

備份

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

$ sudo docker run --volumes-from mydata -v $(pwd):/backup –name worker ubuntu tar cvf /backup/backup.tar /data

這個命令首先利用 Ubuntu 鏡像建立了一個容器 worker。又使用 --volumes-from mydata 參數來讓 worker 容器掛載 mydata 容器的數據卷。接下來使用 -v $(pwd):/backup 參數來掛載本地的當前目錄到 worker 容器的 /backup 目錄。
在 worker 容器啓動後,使用了 tar cvf /backup/backup.tar /data 命令來將 /data 下內容備份爲容器內的 /backup/backup.tar,即宿主主機的當前目錄下的backup.tar。

恢復

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

$ sudo docker run -v /data –name mydata2 ubuntu /bin/bash

而後建立另外一個新的容器,掛載 mydata2 的數據卷,並使用 tar 解壓縮備份文件到所掛載的容器卷中:

$ sudo docker run --volumes-from mydata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
相關文章
相關標籤/搜索