本篇內(nèi)容主要講解“Docker中怎么如何管理數(shù)據(jù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Docker中怎么如何管理數(shù)據(jù)”吧!

創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元互助做網(wǎng)站,已為上家服務,為互助各地企業(yè)和個人服務,聯(lián)系電話:13518219792
到目前我們介紹了一些Docker的基礎(chǔ)感念, 知道了如何使用Docker的image, 也知道了如何在多個container間通過網(wǎng)絡通訊. 在這章里我們將介紹如何在docker的container內(nèi)管理數(shù)據(jù)以及如何在不同的container間共享數(shù)據(jù)。
我們將介紹兩種主要的在docker中管理數(shù)據(jù)的方法:
Data volumes 和
Data volume container
一個 data volume 就是一個在一個或者多個container里的特殊用途的目錄。它繞過了 Union File System (譯者: 這里不確定, 需要研究)為持久化數(shù)據(jù)、共享數(shù)據(jù)提供了下面這一些有用的特性:
Data volumes 可以在不同的container之間共享和重用數(shù)據(jù)
對 Data volume 的修改及時生效(譯者:data volumn是一個目錄, 多個container都掛載這個目錄, 具體的可以通過 docker inspect 看 volumne的信息)
對 data volume 修改內(nèi)容在升級image的時候不會被包括進去 (譯者:在docker的整個設(shè)計中image是一個無狀態(tài)的, 這樣對升級重用非常有利。而標記狀態(tài)的數(shù)據(jù), 比如數(shù)據(jù)庫的數(shù)據(jù), 生產(chǎn)的log之類的應該放到volume里。volume的持久化和恢復在下面有介紹, 是通過文件的形式的, 而不是通過image)
Volumes 的持久化直到?jīng)]有container使用他們
你可以在docker run 的時候使用 -v 來添加一個 data volume。這個參數(shù)在docker run 的時候可以多次使用來添加多個 data volumes。讓我們?yōu)槲覀兊膚eb application container掛載一個 volume。
$ sudo docker run -d -P --name web -v /webapp training/webapp python app.py
這里一個新的volume會創(chuàng)建到container里的 /webapp. (譯者:如果你通過ssh或者通過 -i 登陸到你的container的一個shell里, 使用 ls /webapp 可以驗證掛載成功了)
注意:你也可以在
Dockerfile里添加VOLUME字段,這樣在創(chuàng)建一個新的image的 container是就會自動的創(chuàng)建新的volume.
使用 -v 不僅能創(chuàng)建一個新的 volume, 還可以把宿主機一個目錄mount到container里。
$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
這條命令會把本地目錄 /src/webapp mount到container里的 /opt/webapp 目錄上。用這個方法來測試程序非常方便, 比如我們可以把我們的源代碼通過這個方法mount到container里, 修改本地代碼后立即就可以看到修改后的代碼是如何在container里工作的了。宿主機的目錄必須是絕對路徑, 如果這個目錄不存在docker會為你自動創(chuàng)建。
注意這里是沒法用
Dockerfile實現(xiàn)的, 因為這樣的用法有悖于可移植性和共享. 因為本地目錄就像他名字告訴我們的, 是和本地相關(guān)的, 不一定可以在所有的宿主機上工作.(譯者: 鬼知道你在使用image的時候的host是啥樣子的)
Docker默認設(shè)置volume是可讀寫的,但是我們也可以mount一個目錄為只讀:
$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
這里我們同樣mount了 /src/webapp 目錄, 但是我們加上了 ro 參數(shù), 告訴docker這個volume是只讀的.
如果你有一些持久化的數(shù)據(jù), 并且想在不同的container之間共享這些數(shù)據(jù), 或者想在一些沒有持久化的container中使用, 最好的方法就是使用 Data Volumn Container, 在把數(shù)據(jù)mount到你的container里.(譯者:如開篇譯者提到的docker的container是無狀態(tài)的, 也就是說標記狀態(tài)的數(shù)據(jù),例如:數(shù)據(jù)庫數(shù)據(jù), 應用程序的log 等等, 是不應該放到container里的, 而是放到 Data Volume Container里, 這點和funcational programming很像, 所以我喜歡把一般的docker container 叫做 functional container用來區(qū)分 data volume container )
讓我們創(chuàng)建一個有名字的 Data Volume Container 來共享數(shù)據(jù).
$ docker run -d -v /dbdata --name dbdata training/postgres
這樣做之后就可以通過 --volumes-from 把 /dbdata mount到其他的container里了
$ docker run -d --volumes-from dbdata --name db1 training/postgres
還可以繼續(xù)共享到另外一個container里
$ docker run -d --volumes-from dbdata --name db2 training/postgres
-volumes-from 可以多次使用來 mount 多個conatainer里的多個volumes。
這個操作是鏈式的, 我們在db1 中通過 --volumes-from mount進來的 volume可以繼續(xù)被其他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才會被移除掉。通過這個屬性可以方便的升級升級數(shù)據(jù)或者在不同container間migrate數(shù)據(jù).
Volume的另外一個用處就是備份、恢復和migrate數(shù)據(jù)。 具體的做法如下,使用 --volumes-from 來創(chuàng)建一個新的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 里的數(shù)據(jù)備份到了 /backup 里。命令結(jié)束并且停止這個container后我們就在本地得到了一個備份的數(shù)據(jù).
(譯者: 這里使用的 ubuntu container, 就是為了把volume中的數(shù)據(jù)打包備份到host的某一個目錄里。)
備份的數(shù)據(jù)可以恢復到這個container, 或者其他使用這個volume的container。首先創(chuàng)建一個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
你可以使用你喜歡的工具加上上面的技術(shù)來自動備份,遷移和恢復數(shù)據(jù).
現(xiàn)在我們有多學了一些如何使用docker的知識。 下面我們將看下如何把Docker和Docker Hub提供的服務結(jié)合起來實現(xiàn)自動build,以及學習一些私有repository的知識.
到此,相信大家對“Docker中怎么如何管理數(shù)據(jù)”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!
標題名稱:Docker中怎么如何管理數(shù)據(jù)
URL標題:http://chinadenli.net/article32/jggdpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、云服務器、動態(tài)網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、電子商務、品牌網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)