2017-06-22 61 views
2

我習慣以'傳統'的方式構建web應用程序,但我試圖用泊塢員包裹頭部。如果我在一個容器中運行postgres以及我的python web應用程序,這是否和啓動數字海洋服務器並從頭開始安裝postgres一樣?如何使用docker中的postgres數據庫處理備份,容錯等?Postgres碼頭集裝箱與託管解決方案

作爲替代方案,我通常在Heroku或AWS上使用託管的postgres。這不是解決了我在docker中託管postgres時遇到的很多問題嗎?開發人員是否確實在docker中運行postgres,或者他們通常喜歡使用外部託管服務嗎?

回答

3

目前明智的做法是在Docker中只保留無狀態服務或一次性作業,而不是像數據庫那樣放置任何有狀態的服務。

這個最近的文章mesosphere有關於爲什麼這還不是這種情況的更多細節。

一個問題是,編排技術還不能滿足有狀態服務的高要求。引用:

第一個挑戰是資源隔離。市場上的許多容器編排解決方案都提供了盡力而爲的方式來分配資源,包括內存,CPU和存儲。雖然這對無狀態應用程序來說可能是好的,但它對於有狀態服務來說可能是災難性的,因爲性能下降可能導致客戶交易或數據丟失。

另一種情況是,有狀態數據庫的建立與容器所採用的假設不同,並且對它們進行了大量優化。再次引用:

今天的大多數有狀態數據庫技術最初都是爲非集裝箱世界設計的。操作說明對技術非常具體,有時可能是特定版本。嘗試將容器業務流程平臺的泛型原語映射爲有狀態服務通常是耗時且容易出錯的操作。

+0

完全同意這一點。在Docker中運行有狀態服務所涉及的風險非常高,您需要大量的知識和資源來解決它。使用託管服務更容易,更便宜,這是大多數人正在做的事情。 – jdno

0

你可以在Docker中完全運行你的postgres實例。但是它需要一些工作來處理備份,容錯等。

在我的公司,我們已經選擇了不要將數據庫放到Docker中,至少現在是這樣。