資料卷是乙個可供乙個或多個容器使用的特殊目錄,它繞過 ufs,可以提供很多有用的特性:
*資料卷的使用,類似於 linux 下對目錄或檔案進行 mount。
1.1 建立乙個資料卷
在用docker run
命令的時候,使用-v
標記來建立乙個資料卷並掛載到容器裡。在一次 run 中多次使用可以掛載多個資料卷。
*注意:也可以在 dockerfile 中使用volume
來新增乙個或者多個新的卷到由該映象建立的任意容器。
1.2 掛載乙個主機目錄作為資料卷
使用-v
標記也可以指定掛載乙個本地主機的目錄到容器中去。
*注意:dockerfile 中不支援這種用法,這是因為 dockerfile 是為了移植和分享用的。然而,不同作業系統的路徑格式不一樣,所以目前還不能支援。
docker 掛載資料卷的預設許可權是讀寫,使用者也可以通過:ro
指定為唯讀。
加了:ro
之後,就掛載為唯讀了。
1.3 掛載乙個本地主機檔案作為資料卷
-v
標記也可以從主機掛載單個檔案到容器中
$ docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
這樣就可以記錄在容器輸入過的命令了。
*注意:如果直接掛載乙個檔案,很多檔案編輯工具,包括vi
或者sed --in-place
,可能會造成檔案 inode 的改變,從 docker 1.1 .0起,這會導致報錯誤資訊。所以最簡單的辦法就直接掛載檔案的父目錄。
1.4 檢視資料卷
$ docker volume ls
資料卷容器,其實就是乙個正常的容器,專門用來提供資料卷供其它容器掛載的。
首先,建立乙個命名的資料卷容器 dbdata:
$ docker run -d -v /dbdata --name dbdata training/postgres echo data-only container for postgres
然後,在其他容器中使用--volumes-from
來掛載 dbdata 容器中的資料卷。
$ docker run -d --volumes-from dbdata --name db1 training/postgres
$ docker run -d --volumes-from dbdata --name db2 training/postgres
還可以使用多個--volumes-from
引數來從多個容器掛載多個資料卷。 也可以從其他已經掛載了資料卷的容器來掛載資料卷。
$ docker run -d --name db3 --volumes-from db1 training/postgres
*注意:使用--volumes-from
引數所掛載資料卷的容器自己並不需要保持在執行狀態。
如果刪除了掛載的容器(包括 dbdata、db1 和 db2),資料卷並不會被自動刪除。如果要刪除乙個資料卷,必須在刪除最後乙個還掛載著它的容器時使用docker rm -v
命令來指定同時刪除關聯的容器。 這可以讓使用者在容器之間公升級和移動資料卷。具體的操作將在下一節中進行講解。
可以利用資料卷對其中的資料進行進行備份、恢復和遷移。
3.1 備份
首先使用--volumes-from
標記來建立乙個載入 dbdata 容器卷的容器,並從本地主機掛載當前到容器的 /backup 目錄。命令如下:
$ docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
容器啟動後,使用了tar
命令來將 dbdata 卷備份為本地的/backup/backup.tar
。
3.2 恢復
如果要恢復資料到乙個容器,首先建立乙個帶有資料卷的容器 dbdata2。
$ docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
然後建立另乙個容器,掛載 dbdata2 的容器,並使用untar
解壓備份檔案到掛載的容器卷中。
$ docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf
/backup/backup.tar
持久化機制
redis是乙個支援持久化的記憶體資料庫,也就說redis需要經常將記憶體中的資料同步到硬碟來保證持久化 redis支援兩種持久化方式 1.snapshotting 快照 也是預設方式 將資料存以快照的方式寫入到二進位制檔案中 預設檔名dump.rdb可以通過配置設定自動做快照持久化的方式。我們可以...
Redis的持久化機制
該持久化方式實際是在redis內部乙個定時器事件,每隔固定時間去檢查當前資料發生的改變次數與時間是否滿足配置的持久化觸發的條件,如果滿足則通過作業系統fork呼叫來建立出乙個子程序,這個子程序缺省會與父程序共享相同的位址空間,這時就可以通過子程序來遍歷整個記憶體來進行儲存操作,而主程序則仍然可以提供...
Redis的持久化機制
redis由於支援非常豐富的記憶體資料結構型別,如何把這些複雜的記憶體組織方式持久化到磁碟上是乙個難題,所以redis的持久化方式與傳統資料庫的方式有比較多的差別,redis一共支援四種持久化方式,分別是 在設計思路上,前兩種是基於全部資料都在記憶體中,即小資料量下提供磁碟落地功能,而後兩種方式則是...