首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker多环境

Docker多环境
EN

Stack Overflow用户
提问于 2017-02-17 08:45:49
回答 2查看 18.8K关注 0票数 24

我正试着去理解Docker,但是我很难弄明白。我试图在我的小项目(MERN堆栈)中实现它,我在想如何区分开发环境、(可能是阶段环境)和生产环境。

我看到了一个example,他们使用了2个Docker文件和2个docker-compose文件(每对对应一个env,因此Dockerfile + docker-compose.yml对应于prod,Dockerfile-dev + docker-compose-dev.yml对应于dev)。

但这对我来说似乎有点过头了。我希望它只包含在两个文件中。

还有一个问题是,例如,为了开发,我想要全局安装nodemon,但不是为了生产。

在完美的解决方案中,我想象着运行这样的东西

代码语言:javascript
复制
docker-compose -e ENV=dev build
docker-compose -e ENV=dev up

请记住,我仍然没有完全理解docker,所以如果你发现了我对docker的一些误解,你可以指出它们。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-17 13:35:37

你可以从"Using Compose in production“中获得一些线索。

几乎可以肯定的是,您希望对应用程序配置进行更改,使其更适合实际环境。这些更改可能包括:

始终重新启动删除应用程序代码的任何卷绑定,以便代码保留在容器内,并且不能从outside

  • Binding更改为主机上的不同端口以不同方式设置环境变量(例如,为了减少日志记录的繁琐,或者启用电子邮件重启策略(例如,

)以避免额外的服务(例如,日志聚合器)

因此,该建议与您提到的示例并不十分相似:

出于这个原因,您可能需要定义一个附加的合成文件,比如production.yml,它指定了适合生产环境的配置。这个配置文件只需要包含您想要从原始合成文件中进行的更改。

docker-compose -f docker-compose.yml -f production.yml up -d

这个比试图在一个组合文件中混合开发和生产逻辑,使用环境变量来尝试选择一个要好得多。

注意:如果您将第二个dockerfile命名为docker-compose.override.yml,则一个简单的docker-compose up将自动读取覆盖。

但在您的情况下,基于环境的名称更清晰。

票数 27
EN

Stack Overflow用户

发布于 2017-07-31 07:36:22

默认情况下,Docker Compose将读取docker-compose.ymldocker-compose.override.ymlUnderstanding-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

然后,项目结构将如下所示:

代码语言:javascript
复制
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检查它是否已被正确覆盖。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42287426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档