使用者在使用 docker 的過程中,往往需要能檢視容器內應用產生的資料,或者需要把容器內的資料進行備份,甚至多個容器之間進行資料的共享,這必然涉及容器的資料管理操作。容器中管理資料主要有兩種方式:資料卷(data volumes),資料卷容器(data volume containers)。
資料卷是乙個可供容器使用的特殊目錄,它繞過檔案系統,可以提供很多有用的特性:
1. 資料卷可以在容器之間共享和重用。
2. 對資料卷的更改會立即生效。
3. 對資料卷的更新不會影響映象。
4. 資料捲會一直存在,直到沒有容器使用。
資料卷的使用,類似於 linux 下對目錄或檔案進行 mount 操作。
在用 docker run 命令的時候,使用 -v 標記可以在容器內建立乙個資料卷。多次使用 -v 標記可以建立多個資料卷。
使用 -v 標記也可以指定掛載乙個本地的已有目錄到容器中去作為資料卷:
上面的命令掛載主機的 /var/data 目錄到容器的 /opt/webdata 目錄。
這個功能在接下測試的時候特別方便,比如使用者可以放置一些程式或資料到本地目錄中,然後在容器中使用。另外,本地目錄的路徑必須是絕對路徑,如果目錄不存在,docker 會自動建立。
docker 掛載資料卷的預設許可權是可讀寫(rw),使用者也可以通過 ro 標記指定為唯讀:
加了 :ro 之後,容器內掛載的資料卷內的資料就變成唯讀的了。
-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
出處:
Docker資料卷之高階篇
容器之間資料共享,修改同步 配置如下 type 指定掛載方式,我們這裡用到的是 volume 其實還可以有 bind 和 tmpfs volunme 這個目錄只有docker可以管理,其他程序不能修改。如果想持久儲存容器的 應用資料,volumes是 docker 推薦的掛載方式。bind 容器內的...
Docker基礎 3 資料卷
docker容器一旦被刪除,容器本身對應的rootfs檔案系統就會被刪除,容器中的所有資料也將隨之消失。docker提供了資料卷的方式來持久化容器產生的資料,通過資料卷,還可以在容器之間共享資料。建立容器時,通過 v引數可以資料卷,v引數的格式為 host dir container dir rw ...
Docker基礎 3 資料卷
docker容器一旦被刪除,容器本身對應的rootfs檔案系統就會被刪除,容器中的所有資料也將隨之消失。docker提供了資料卷的方式來持久化容器產生的資料,通過資料卷,還可以在容器之間共享資料。建立容器時,通過 v引數可以資料卷,v引數的格式為 host dir container dir rw ...