2016-09-23 38 views
0

我有一個託管在服務器上的Web應用程序,它使用virtualEnv來分隔dev和prod實例。兩個實例共享相同的postgres數據庫。 (所有在同一臺服務器上)獨立開發和生產實例和數據庫

我是一個新的碼頭工人,我想用docker容器替換dev和prod實例,並且每個鏈接到它的dev或prod postgres容器(或類似的效果,開發中的代碼更改不會影響生產數據庫。)

此方案的最佳設計是什麼?我應該將dev和prod容器映射到不同的端口嗎?我可以爲dev和prod容器共同擁有1個dockerfile嗎?我如何處理2個postgres容器?

回答

1

看來你的要求不是很複雜的,所以我覺得你可以運行2個容器(每對有一個應用程序容器和一個Postgres的容器),以實現這一目標,基本結構如下所示:

devContainer---> pgsDBContainer:<port_number1> ---> dataVolume1 

prodContainer---> pgsDBContainer:<port_number2> ---> dataVolume2 

每個容器對都有一個專用端口號和一個專用卷。用於dev或prod應用程序連接到相應postgres數據庫的端口號,這應該很容易理解。但數量是另一回事。

請閱讀Manage data in containers文檔瞭解容器體積。正如你所提到的那樣,"a code change in development will not affect production database",這意味着你應該有兩個單獨的卷用於postgres容器,所以數據庫的數據不會混淆。

對於dev和prod容器,我可以有1個dockerfile嗎?

是的,你可以,就像我提到的,你應該給每個Postgres的容器不同的端口和卷配置,當你與docker run命令將其啓動。 docker runEXPOSE選項和VOLUME選項可供您配置端口號和卷位置。

提醒一下,當您在容器中運行數據庫時,可能需要考慮容器環境中的數據持久性,以避免容器被移除導致的數據丟失。容器Data Persistent的一些討論可以在herethere找到。