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

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

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

什么是这种情况下最好的devise? 我应该将dev和prod容器映射到不同的端口吗? 我可以有dever和prod容器的1个dockerfile吗? 我如何处理2个postgres容器?

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

devContainer---> pgsDBContainer:<port_number1> ---> dataVolume1 prodContainer---> pgsDBContainer:<port_number2> ---> dataVolume2 

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

请阅读此pipe理容器卷中的容器文档中的数据 。 正如你所提到的, "a code change in development will not affect production database" ,这意味着你应该有两个独立的容器用于postgres,所以数据库的数据不会混淆。

我可以有dever和prod容器的1个dockerfile吗?

是的,你可以,正如我所提到的,当你用docker run命令启动它们时,你应该给每个postgres容器不同的端口和容量configuration。 docker运行有EXPOSE选项和VOLUME选项,您可以configuration端口号和音量位置。

提醒一下,当您在容器中运行数据库时,您可能需要考虑容器环境中的数据持久性,以避免容器被移除导致的数据丢失。 有关容器Data Persistent的讨论可以在这里和那里find。