我正试着去理解Docker,但是我很难弄明白。我试图在我的小项目(MERN堆栈)中实现它,我在想如何区分开发环境、(可能是阶段环境)和生产环境。
我看到了一个example,他们使用了2个Docker文件和2个docker-compose文件(每对对应一个env,因此Dockerfile + docker-compose.yml对应于prod,Dockerfile-dev + docker-compose-dev.yml对应于dev)。
但这对我来说似乎有点过头了。我希望它只包含在两个文件中。
还有一个问题是,例如,为了开发,我想要全局安装nodemon,但不是为了生产。
在完美的解决方案中,我想象着运行这样的东西
docker-compose -e ENV=dev build
docker-compose -e ENV=dev up请记住,我仍然没有完全理解docker,所以如果你发现了我对docker的一些误解,你可以指出它们。
发布于 2017-02-17 13:35:37
你可以从"Using Compose in production“中获得一些线索。
几乎可以肯定的是,您希望对应用程序配置进行更改,使其更适合实际环境。这些更改可能包括:
始终重新启动删除应用程序代码的任何卷绑定,以便代码保留在容器内,并且不能从outside
)以避免额外的服务(例如,日志聚合器)
因此,该建议与您提到的示例并不十分相似:
出于这个原因,您可能需要定义一个附加的合成文件,比如production.yml,它指定了适合生产环境的配置。这个配置文件只需要包含您想要从原始合成文件中进行的更改。
docker-compose -f docker-compose.yml -f production.yml up -d
这个比试图在一个组合文件中混合开发和生产逻辑,使用环境变量来尝试选择一个要好得多。
注意:如果您将第二个dockerfile命名为docker-compose.override.yml,则一个简单的docker-compose up将自动读取覆盖。
但在您的情况下,基于环境的名称更清晰。
发布于 2017-07-31 07:36:22
默认情况下,Docker Compose将读取docker-compose.yml和docker-compose.override.yml。Understanding-Multiple-Compose-Files
您可以设置默认的docker-compose.yml和不同的覆盖合成文件。例如,docker-compose.prod.yml docker-compose.test.yml。将它们放在相同的位置。
然后为每个环境创建一个名为docker-compose.override.yml的符号链接。
跟踪docker-compose.{env}.yml文件并将docker-compose.override.yml添加到.gitignore。
在产品环境中:ln -s ./docker-compose.prod.yml ./docker-compose.override.yml
在测试环境中:ln -s ./docker-compose.test.yml ./docker-compose.override.yml
然后,项目结构将如下所示:
project\
- docker-compose.yml # tracked
- docker-compose.prod.yml # tracked
- docker-compose.test.yml # tracked
- docker-compose.override.yml # ignored & linked to override composefile for current env
- src/
- ...那么你已经完成了。在每个环境中,您都可以使用带有相同命令docker-compose up的组成文件
如果您不确定,请使用docker-compose config检查它是否已被正确覆盖。
https://stackoverflow.com/questions/42287426
复制相似问题