首頁  >  文章  >  後端開發  >  Docker官方論壇中回覆最多的一個貼文“在資料容器內升級資料”

Docker官方論壇中回覆最多的一個貼文“在資料容器內升級資料”

WBOY
WBOY原創
2016-08-08 09:30:57732瀏覽

Docker官方論壇中回覆最多的一個帖子「在資料容器內升級資料」


matlehmann
我有一個含資料的容器,它有一個卷(例如在/var/data)中的持久性資料。此容器包含持久性資料對另一個容器的軟體。
對於該軟體的新版本,需要升級所述永久資料(結構或佈局變更等)。結果是,我想與在相同的位置已升級的資料的另一個資料容器(在/var/data)和仍保留舊資料容器與它的資料不變。
這樣一來,我可以用舊的資料容器與舊版的軟體,萬一出了差錯。
但是,我怎麼能做到這一點?以實現所期望的結果所需的步驟對我來說是不明顯的。
我可以運行一個命令來升級容器像docker run -i -t --name temp --volumes-from data -v /upgraded image /upgrade_script.sh
但後來,我怎麼將升級的資料恢復到原來的位置而沒有覆蓋舊的數據?如果我執行docker run -i -t --volumes-from temp image cp /upgraded /var/data,它將覆寫我的舊資料。我必須使用主機安裝的磁碟區為升級的數據,或者是有一些更好的解決方案?

sam
只是猜測,因為這裡一般我更喜歡使用直主機安裝捲和我苦苦尋找資料容器的效用。
但是......你能不能提交你的資料容器,然後儲存映像等?
sven
哦,也請考慮使用docker commit快照容器SAM的建議迷死人了
keeb
我實際使用的資料容器,如UNIX管道;我覺得他們適合更自然在範式
docker run -name some_pipe_storage some_container_ckerwich_yf run --volumes-from some_pipe_storage something_that_operates_on_data
語法,相當繁瑣。非常強大卻比較原始。

sven有一些有趣的工作,關於加入卷的管理工具docker是怎麼回事 - 我認為他們是前往1.4,我會做一些調查。 (有將是docker卷列表和操縱的東西)
我可能會做一個backup_data卷的容器中,然後運行一個數據遷移的形象,我想運行連接到數據和backup_data - 它可能做的第一件事是複製了從資料到backup_data,然後它會做的資料遷移。
然後你就可以運行舊的和新的,連接到每個各自databackend(與可能附著只讀的備份?)
這樣做,如果你使用的主機安裝的應幾乎是一樣的,無論是直接或通過資料容器的風格代表。

matlehmann您的建議是我的第一個想法行,但它並不符合我的預期,因為該過程後,遷移數據和原始數據將根據不同的路徑,我看不出有什麼辦法改變這種狀況,因為非主機磁碟區不能被重新安裝到不同的路徑。從一個資料容器的體積的路徑是靜態的 - 即使對於由“--volumes-from”繼承卷容器。
這是主機體積不同,因為我可以在每個docker運行呼叫改變這些的掛載位置。
我認為這些捲管理工具,你說說是非常必要的。對我來說,這個資料容器docker成語感覺更像是一個變通。
請問您在闡述“docker commit迷死人了”,因為我看不到它,然而。至少在用例在手。據我所知,一個docker提交給我,其中包含一個容器的當前狀態的新圖像。這樣將包括除持久性資料我感興趣的所有OS資料。

sven哦crud。你說得對,磁碟區路徑是目前靜態的。所以你需要一個步驟
1.你有在/資料中的現有的資料容器
2.遷移到位於/遷移的臨時資料容器(如你有原始安裝)
3./遷移資料遷移到安裝在新升級的資料容器/資料(第二遷移映像就不需要原始的資料容量裝
@ cpuguy83也許能告訴你更多關於新工具的微笑
WRT docker commit - 當你commit,你是不是在一個單一的包含圖像層的一切,你正在做一個新的圖像層,包含所有容器中所做的更改(與圖像容器啟動時使用)。之類的東西日誌,你可以使用docker承諾快照/備份只是你的持久性數據- 和docker的出口可能讓你存儲這些層。你將被限制在127提交的,除非你拼合映像出來。

matlehmann
@Sven感謝您的答复,並了解更多資訊。我還是不明白第3步的“/遷移資料遷移到安裝在/資料的新升級的資料容器(第二次遷移映像就不需要原始的資料容量裝”,因為它目前是(與docker1.2和無特殊卷命令),我不看我怎麼可以有一個容器與另一個容器體積- 他們的一部分安裝的,其中一部分沒有安裝就我所看到的,它要么全有或全無,要么以"- -volumes-from other_container"或沒有。因此,如果遷移容器from步驟2具有原始資料裝入,該容器在步驟3它已安裝,也因此在複製操作從/mifrated到/data將覆蓋原始資料。還是我失去了一些東西?解決這個問題,我在說什麼。 。
最初,你會已經運行的基於1.0系統
docker run -v /data --name datav10 busybox true

docker run -p 80:80 --volumes-from datav10 --name webv10 webappv10資料給我升級了,你會做第2步(如你指出,我們不能有兩個卷在相同目錄)

docker run -v /migration --name datav10-to-v11 busybox truedocker run --volumes -from datav10-to-v11 --volumes-from datav10 --name migration webapp_migratorv10_to_v11
然後步驟3,對複製的數據遷移到一個新的數據容器,在/數據目錄中的數據,準備使用
docker run -v /data --volumes-from datav10-to-v11 --name datav11 busybox cp -r /migration /data

然後運行1.1版Web應用程式

docker run -p 80:80 --volumes-fromdatav111 -- webappv11而額外的信用,你最好腳本化這一切。
更新到datav10到V11卷容器一步增加是由於下面的討論



matlehmann
@sven 再次感謝您的詳細解答。我很欣賞你的思想和時間。
但是,您勾勒的程序不起作用。它叫做裝有“-v”卷推翻一個體積繼承“"--volumes-from”同一路徑的假設。我剛剛再次測試它,以確保,但這種情況並非如此。這就是為什麼docker run -v / data --volumes-from migration --name datav11 busybox cp -r /migration /data將覆蓋我的原始資料的容器datav10。 (也就是更容易透過感覺意會/處理)



sven
我很困惑。我們將其複製到新的數據V11容器。差異是,綁定坐騎只能在本地,並且假設你有磁碟空間為它(不是我做的),而體積容器方法假定您Docker ,資料分割區是大到足以運行Docker 的容器,和作品一樣的本地遠端。 @SAM我現在切換到使用bind-mounted 綁定安裝的(或任何官方用語是"-v /host:/container") 卷,而不是使用資料容器,因為在這個線程中列出的缺點。使用資料容器,因為成語的使用和推薦的所有在互聯網上,似乎是“官方方式”。

?"migration" has ?"/data" (via --volumes from datav10)

?"/migration" (via `-v /migration')



?"datav11" ?" datav11" (via -v /data)
?"/migration" (via --volumes from migration)

?"/data" (via --volumes-from migration)


因此,我們有「/data」容器「 datav11”兩卷定義- 對我來說它看起來就像從--volumes-from 勝利之一。


sam
@sven我想我只是在努力找出你將存儲在AUFS數據的原因,這似乎是一種錯誤的文件系統用於這個問題。 BTRFS將是確定的,但似乎aufs的日誌文件,一個奇怪的選擇,Postgres資料庫用的等等。我誤解資料容器的機制?

@matlehmann我們用「卷」廣泛。
?我們店外容器的主機安裝卷,便於旋轉和持久性的所有日誌。 (這裡是另一個選擇是將流出來的容器,但機制是不平凡的,想想說的NGINX的容器,你用日誌呢?)
?我們儲存一些配置一個安裝GlusterFS卷上,所以我們能吸收的東西橫跨農場

matlehmann
@sven這將是另一個線程的話題:我真的很希望聽到你的GlusterFS設定。有沒有準備好使用可用的映像,可以作為GlusterFS內像一個代表卷或你怎麼做呢?

sam
@supermathie將是最適合我們的GlusterFS設置的詳細信息,但它是在一個非常傳統的方式,所有的設置,我們不使用受信任的docker容器上電Gluster的。

sven
OH(*&^,你說得對。
我想我是如此聰明刪除一步。
你需要把/遷移文件夾到自己的資料容器,這樣就可以避免你在最後一步注意的問題。安裝工程量太- 但我仍然會做鏈接到它們,然後使用相同的過程,以上數據體積的容器。一個尷尬的瘋狂雞起舞,但它可能工作...翹首等待的捲命令。
 

本文翻譯自Docker官方論壇:
https://forums.docker.com/t/upgrade-data-within-data-container/205/20

以上就介紹了Docker官方論壇中回覆最多的一個帖子“在數據容器內升級數據”,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn