數據庫不適合docker及容器化的幾大原因:
1、數據不安全
即使你要把 docker 數據放在主機來存儲 ,它依然不能保證不丟數據。 Docker volumes 的設計圍繞 Union FS 鏡像層提供持久存儲,但它仍然缺乏保證。
使用當前的存儲驅動程序,Docker 仍然存在不可靠的風險。 如果容器崩潰并數據庫未正確關閉,則可能會損壞數據。
2、運行數據庫的環境需求
??吹?DBMS 容器和其他服務運行在同一主機上。 然而這些服務對硬件要求是非常不同的。
數據庫(特別是關系型數據庫)對 IO 的要求較高。 一般數據庫引擎為了避免并發資源競爭而使用專用環境。如果將你的數據庫放在容器中,那么將浪費你的項目的資源。 因為你需要為該實例配置大量額外的資源。 在公有云,當你需要 34G 內存時,你啟動的實例卻必須開 64G 內存。在實踐中,這些資源并未完全使用。
怎么解決? 您可以分層設計,并使用固定資源來啟動不同層次的多個實例。 水平伸縮總是比垂直伸縮更好。?
3、網絡問題
要理解 Docker 網絡,您必須對網絡虛擬化有深入的了解。也必須準備應付好意外情況。你可能需要在沒有支持或沒有額外工具的情況下,進行 bug 修復。
4、狀態
在 Docker 中打包無狀態服務是很酷的,可以實現編排容器并解決單點故障問題。 但是數據庫呢? 將數據庫放在同一個環境中,它將會是有狀態的,并使系統故障的范圍更大。下次您的應用程序實例或應用程序崩潰,可能會影響數據庫。
5、額外的隔離對數據庫是不利的
其實我在第二點和第三點原因中提到了這一點。 但我把這個列為單獨的原因,因為我想再次強調這一事實。 我們擁有的隔離級別越多,我們獲得的資源開銷就越多。 相比專用環境而言,容易水平伸縮可以使我們得到更多的好處。 然而在 Docker 中水平伸縮只能用于無狀態計算服務,而不是數據庫。
我們沒有看到任何針對數據庫的隔離功能,那為什么我們應該把它放在容器中?
推薦教程:docker教程