我們將介紹兩種主要的在docker中管理資料的方法:
data volumes
乙個 data volume 就是乙個在乙個或者多個container裡的特殊用途的目錄。它繞過了 union file system (譯者: 這裡不確定, 需要研究)為持久化資料、共享資料提供了下面這一些有用的特性:
新增資料卷
注意: 你也可以在dockerfile裡新增 volume 字段,這樣在建立乙個新的image的 container是就會自動的建立新的volume.安裝乙個目錄作為資料卷
使用 -v 不僅能建立乙個新的 volume, 還可以把宿主機乙個目錄mount到container裡。
注意 這裡是沒法用 dockerfile實現的, 因為這樣的用法有悖於可移植性和共享. 因為本地目錄就像他名字告訴我們的, 是和本地相關的, 不一定可以在所有的宿主機上工作.(譯者: 鬼知道你在使用image的時候的host是啥樣子的)docker預設設定volume是可讀寫的,但是我們也可以mount乙個目錄為唯讀:
建立並安裝資料卷容器
讓我們建立乙個有名字的 data volume container 來共享資料.
$ docker run -d -v /dbdata --name dbdata training/postgres
這樣做之後就可以通過 --volumes-from 把 /dbdata mount到其他的container裡了
$ docker run -d --volumes-from dbdata --name db1 training/postgres
還可以繼續共享到另外乙個container裡
$ docker run -d --volumes-from dbdata --name db2 training/postgres
-volumes-from 可以多次使用來 mount 多個conatainer裡的多個volumes。
這個操作是鏈式的, 我們在db1 中通過 --volumes-from mount進來的 volume可以繼續被其他container使用
$ docker run -d --name db3 --volumes-from db1 training/postgres
(譯者: 這裡我們不是直接使用 volume container, 而是使用db1 這個functional container 把volume 掛載到另外乙個 funcational container上的,所謂的鏈式就是 dbdata -> db1 -> db3)
如果你把所有mount volumes的container都移除掉, 包括初始化的那個 dbdata container, volume才會被移除掉。通過這個屬性可以方便的公升級公升級資料或者在不同container間migrate資料.
備份、恢復和移植資料卷
volume的另外乙個用處就是備份、恢復和migrate資料。 具體的做法如下,使用 --volumes-from 來建立乙個新的container mount這個volume
$ sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
這裡我們啟動了乙個新的container, 從 dbdata 掛載了乙個volume。同時掛載了乙個本地目錄到這個container裡。最後我們通過乙個 tar命令把 dbdata 裡的資料備份到了 /backup 裡。命令結束並且停止這個container後我們就在本地得到了乙個備份的資料.(譯者: 這裡使用的 ubuntu container, 就是為了把volume中的資料打包備份到host的某乙個目錄裡。)
備份的資料可以恢復到這個container, 或者其他使用這個volume的container。首先建立乙個container
$ sudo docker run -v /dbdata --name dbdata2 ubuntu
之後un-tar備份檔案到 data volume 裡
$ sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
你可以使用你喜歡的工具加上上面的技術來自動備份,遷移和恢復資料 Docker容器資料管理1
容器的持久化資料如何儲存 這篇講得非常清楚 還可以參考這兩篇 然後就是官網 docker的檔案系統 映象是read only layers 容器啟動後在映象層之上新增read write layer 對於映象層檔案的修改動作是將其拷貝至read write layer進行,並hide原檔案 當容器被...
在Docker中管理資料
可能需要在容器中的可寫入層儲存資料,但這樣會有以下缺點 docker提供三種方式從docker主機掛載資料下容器中 volumes bind mount和tempfs mount。當不確定的時候,卷區總是最好的選擇。選擇適合的掛載型別 無論使用哪種型別,資料使用上感覺和在容器中一樣。在容器中顯示為資...
Docker中的資料管理
使用docker時往往需要對資料進行持久化,或者需要在多個容器之間進行資料傳輸 2 資料卷容器 簡單理解就是先在本地建立乙個目錄,然後容器去掛載這個目錄,無論哪邊修改這個目錄內容哪邊都能看見 類似於 mount 掛載,推薦掛載檔案所在的目錄,不推薦只掛載乙個檔案 特性資料卷可以在容器之間共享和重用 ...