一尘不染

Docker多种环境

docker

我想把头围在Docker上,但是很难弄清楚。我试图在我的小项目(MERN堆栈)中实现它,并且我在思考如何区分开发(可能是登台)和生产环境。

我看到了一个示例,其中他们使用了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的一些误解,则可以指出它们。


阅读 359

收藏
2020-06-17

共1个答案

一尘不染

你可以采取一些线索,从“ 在生产中使用撰写

您几乎肯定会想要对应用程序配置进行更改,使其更适合实时环境。这些更改可能包括:

  • 删除应用程序代码的所有卷绑定,以使代码保留在容器内,并且不能从外部更改
  • 绑定到主机上的不同端口
  • 设置不同的环境变量(例如,减少日志记录的冗长性或启用电子邮件发送)
  • 指定重启策略(例如,重启:始终)以避免停​​机
  • 添加额外的服务(例如,日志聚合器)

然后,该建议与您提到的示例不太相似:

因此,您可能需要定义一个额外的Compose文件,例如production.yml,以指定适合生产的配置。该配置文件只需要包含您想要对原始Compose文件进行的更改。

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

这种 覆盖机制
比尝试在一个撰写文件中混合使用dev和prod逻辑更好,并且使用环境变量尝试选择一个更好。

注意:如果您命名第二个dockerfile docker-compose.override.yml,则简单的docker-compose up将自动读取覆盖。
但是根据您的情况,基于环境的名称会更清晰。

2020-06-17