2016-09-23 65 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找到。