单独的开发和生产实例和数据库

时间:2016-09-23 21:14:59

标签: postgresql docker docker-compose dockerfile

我有一个托管在服务器上的Web应用程序,它使用virtualEnv来分隔dev和prod实例。两个实例共享相同的postgres数据库。 (全部在同一台服务器上)

我是docker的新手,我想用docker容器替换dev和prod实例,以及每个链接到dev或prod postgres容器(或类似的效果,以便开发中的代码更改不会影响生产数据库。)

这种情况的最佳设计是什么?我应该将dev和prod容器映射到不同的端口吗?我可以为dev和prod容器提供1个dockerfile吗?我该如何处理2个postgres容器?

1 个答案:

答案 0 :(得分:1)

似乎你的要求不是很复杂,所以我认为你可以运行2对容器(每对有一个应用容器和一个postgres容器)来实现这个,基本结构描述如下:

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

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

每个容器对都有一个专用端口号和一个专用卷。用于dev或prod应用程序的端口号连接到相应的postgres数据库,应该很容易理解。但音量是另一个故事。

请阅读此Manage data in containers doc了解容器容量。正如你提到"a code change in development will not affect production database",这意味着你应该有两个独立的postgres容器卷,所以数据库的数据不会混淆。

  

我可以为dev和prod容器都有1个dockerfile吗?

是的,就像我提到的那样,当你使用docker run命令启动它们时,你应该为每个postgres容器提供不同的端口和卷配置。 docker runEXPOSE选项和VOLUME选项供您配置端口号和卷位置。

提醒一下,当您在容器中运行数据库时,可能需要考虑容器环境中的Data Persistent以避免因删除容器而导致的数据丢失。可以找到关于容器数据持久性的一些讨论herethere