今天我們來講講容器的資料管理,在使用docker的時候,我們需要經常檢視容器內應用產生的資料,或者把容器裡的資料進行備份,甚至我們可以實現多個容器之間的資料共享。
容器中管理資料主要有兩種方式,一種是資料卷,另一種是資料卷容器
今天主要和大家聊聊資料卷,我會給大家介紹如何在容器裡面建立資料卷,並把本地的目錄或檔案掛載到容器內的資料卷中。
資料卷:
我們可以這樣理解,資料卷是乙個可供容器使用的特殊目錄,它繞過檔案系統,可以提供很多有用的特性:
1)資料卷可以在容器之間共享和重用;
2)對資料卷的修改會立馬生效;
3)對資料卷的更新,不會影響映象;
4)捲會一直存在,直到沒有容器使用
資料卷的使用,類似於linux下對目錄或檔案進行mount操作
在容器內建立乙個資料卷:
在用docker run 命令的時候,用-v標記可以在容器內建立乙個資料卷,可以在一行命令中多次使用,建立多個資料卷。
下面上個栗子:
其中-p是允許外部訪問容器需要暴露的埠,便於我們檢視
掛載乙個主機目錄作為資料卷:
同樣滴,-v標記也可以用在這裡,掛載到主機目錄,也就是指定掛載乙個本地的已有目錄到容器中作為資料卷。
再來個栗子:
> $ docker run -d
-p
那這個能有啥用呢,比如,我們在測試的時候,可以直接把一些程式和資料放置到本地目錄中,然後在容器中執行和使用。
本地目錄的路徑必須是絕對路徑,如果這個目錄不存在的話,我們超級膩害的docker會自動建立啦
docker 掛載資料卷的預設許可權是讀寫,我們也可以在命令列容器路徑後加:ro指定為唯讀
如:
> $ docker run -d
-p
加了這個:ro之後呢,容器內掛載的資料卷就不能修改了
掛載乙個本地主機檔案作為資料卷:
還是用-v做標記,從主機掛載單個檔案到容器中作為資料卷。
> $ docekr run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
這樣就可以記錄在容器中輸入過的命令歷史了。
注:如果直接掛載乙個檔案到容器,使用檔案編輯工具,包括vi或者sed –in-place的時候,可能會造成檔案inode的改變,從docker 1.1.0起,這會導致報錯,所以推薦直接掛載檔案所在的目錄
資料卷容器比資料卷還要方便使用,就是在使用者需要在容器之間共享一些持續更新的資料,資料卷容器就是最簡單的方式了,就是把我們要用的資料卷做成乙個單獨的容器,,專門用它提供資料。
具體的掛載方法我們來看一下:
先建立乙個資料卷容器dbdata,並在其中建立乙個資料卷掛載到/dbdata:
# 檢視/dbdata目錄:
# ls
然後,可以在其他容器中使用–volumes-from來掛載dbdata容器中的資料卷,例如建立db1和db2兩個容器,並從dbdata容器掛在資料卷:
--volumes-from dbdata --name db1 ubuntu:14.04
--volumes-from dbdata --name db2 ubuntu:14.04
此時,容器db1和db2都掛載到同乙個資料捲到相同的/dbdata目錄,這三個容器中的任何一方在該容器下的寫入,其它容器都可以看到。
例如,在dbdata容器中建立乙個test檔案:
然後在db1容器裡檢視:
我們可以多次使用–volumes-from引數來從多個容器掛載多個資料卷,還可以從其他已經掛載了容器卷的容器來掛載資料卷:
> $
docker
run-d-
-name
db3-
-volumes
-from
db1ubuntu:14
.04
如果我們刪除了掛載的容器(包括dbdata、db1、db2),資料卷並不會被自動刪除,如果要刪除乙個資料卷,必須要同時刪除關聯的容器,使用docker rm -v命令。
使用資料卷容器可以讓使用者在容器之間自由的公升級和移動資料卷;
所以接下來我們講一講如何利用資料卷容器遷移資料:
我們可以利用資料卷容器對其中的資料卷進行備份、恢復,以實現資料的遷移。
先說說備份:
> $ docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu:
14.04 tar cvf /backup/backup.tar /dbdata
有些許小複雜,跟大家講一下這個命令:
首先,利用ubuntu:14.04映象建立了乙個容器worker,使用–volumes-from dbdata引數來讓worker容器掛載dbdata容器的資料卷,也就是dbdata,使用-v $(pwd):/backup引數來掛載本地的當前目錄到worker容器的/backup目錄
worker容器啟動後,使用了tar cvf /backup/backup.tar 命令來將/dbdata下內容備份為容器內的/backup/backup.tar
再說說恢復:
如果要恢復乙個資料到容器
我們可以醬紫:
先建立乙個帶有資料卷的容器dbd
> $ docker run -v /dbdata --name dbdata2 ubuntu:14.04 /bin/bash
建另乙個新的容器掛載dbdata2的容器,並使用untar解壓備份檔案到所掛載的容器卷中:
> $ docker run --volumes-from dbdata2 -v $(pwd):/backup
ubuntu:
14.04 tar xvf /backup/back.tar
資料,無疑對我們來說是最重要的,docker為資料管理提供了充分的支援,我們通過這兩次課講了資料卷和資料卷容器對容器內資料進行共享、備份、恢復等操作,通過這些個機制,即使容器在執行中出現故障,我們也不必擔心資料發生丟失,只需要快速的重建容器就可以啦,在實際環境中,我們最好要定期的將主機的本地資料進行備份,或者使用支援容錯的儲存系統,後期如果有興趣可以給大家講講分布式檔案系統
over
小娜老師的講義 Docker基礎知識 容器(二)
好了,今天講一哈容器的刪除 匯入 匯出 刪除容器 我們一般用docker rm 命令刪除處於終止狀態的容器,命令格式為 docker rm options container container 支援選項包括 f,force false強行終止並刪除乙個執行中的容器 l,link false 刪除容...
小娜老師的講義 Docker基礎知識 網路基礎配置
今天講docker的網路基礎配置 比較成熟的網際網路應用服務往往需要很多服務元件,為了更好地相互配合,需要多個容器之間可以互聯通訊。目前docker提供的是對映容器埠到宿主主機以及容器互聯機制來為容器提供網路服務。使用的docker的網路功能包括使用埠對映機制來將容器內應用服務提供給外部網路,以及通...
微軟小娜APP的案例分析
通過各種案例分析,評測,辯論,總結,我們就能看到軟體工程的原則在實踐中的種種體現,學好軟體工程,幫助我們在實踐中做得更好。產品 微軟小娜 智慧型助手,win10,ios或 android 客戶端都有!第一部分 調研,評測 軟體的 bug,功能評測,黑箱測試,第 8章 使用者調研,12 章 軟體的使用...