2016-11-23 53 views
1

碼頭圖像是隻讀的。當我們通過映像實例化一個容器時,託管在容器中的進程能夠在磁盤上寫入,但這些更改無法在容器重啓之後存活。有很多Docker容器託管像Sql Server這樣的數據庫服務: https://hub.docker.com/r/microsoft/mssql-server-windows/碼頭集裝箱數據庫 - 只讀圖像vs耐用性

不是Docker鏡像的只讀本質是否會打敗持久數據庫的目的?我看到什麼錯誤?

順便說一下,我在自動化測試中看到了這種只讀本質的很好的可用性(不需要回滾),但這不是db的主要用途。

+0

泊塢窗圖像不是隻讀的。它們可以用''docker build'''或'''docker commit'''來修改。 Docker容器可以存儲數據,如果你不移除它的容器,數據可以存活。 – Tuan

+0

謝謝Tuan。請糾正我,如果我錯了,但'碼頭建設'和'碼頭提交'是「設計時間」的變化,而數據庫提交是「運行時」的變化。顯然,我對後者感興趣。 – user256890

回答

1

如果您想要在您的容器重新啓動後仍然存在的持久數據,則可以使用來存儲數據。

MySQL映像使用/var/lib/mysql目錄來存儲數據庫的「實時」數據。如果將此文件夾映射到Docker卷,它將在重新啓動和刪除容器後繼續存在 - 除非您還刪除了該卷。 MS SQL映像可能有一個類似的目錄,可將其映射到卷以使數據持久。

你是對的,默認行爲是不持久(非常適合一次性測試),但如果你想讓它存活下來,你可以使用卷。

1

在容器中支持SQL Server數據庫有兩種方法。使用ADDDB將把數據庫複製到容器專用文件系統中,只要該容器沒有被刪除,該數據庫就可以保留。數據庫將在容器停止時停止,並在容器啓動時重新掛接。但是,當容器被刪除時,它會丟失。另一種方法是使用MOUNTDB,它使用本地主機或遠程將數據庫裝載到容器。在這種情況下,如果容器被刪除,該文件仍然存在。