mac*_*atu 17 development-environment docker dockerfile docker-compose
我正试着把头包裹在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
Run Code Online (Sandbox Code Playgroud)
请记住,我仍然没有完全得到docker,所以如果你发现了一些关于docker的误解,你可以指出它们.
Von*_*onC 20
你可以采取一些线索,从" 在生产中使用撰写 "
您几乎肯定希望对更适合实时环境的应用配置进行更改.这些变化可能包括:
- 删除应用程序代码的任何卷绑定,以便代码保留在容器内,不能从外部更改
- 绑定到主机上的不同端口
- 以不同方式设置环境变量(例如,减少日志记录的详细程度,或启用电子邮件发送)
- 指定重启策略(例如,重启:始终)以避免停机
- 添加额外服务(例如,日志聚合器)
这个建议与你提到的例子不太相似:
因此,您可能希望定义一个额外的Compose文件,例如
production.yml,它指定适合生产的配置.此配置文件只需要包含您要从原始Compose文件中进行的更改.Run Code Online (Sandbox Code Playgroud)docker-compose -f docker-compose.yml -f production.yml up -d
这种重写机制比尝试在一个compose文件中混合dev和prod逻辑更好,用环境变量来尝试选择一个.
注意:如果您为第二个dockerfile命名docker-compose.override.yml,则simple docker-compose up会自动读取覆盖.
但在您的情况下,基于环境的名称更清晰.
默认情况下,Docker Compose 将读取docker-compose.yml和docker-compose.override.yml。理解多个组合文件
您可以设置默认docker-compose.yml和不同的覆盖撰写文件。例如,docker-compose.prod.yml docker-compose.test.yml。将它们放在同一个地方。
然后创建一个docker-compose.override.yml为每个 env命名的符号链接。
跟踪docker-compose.{env}.yml文件并添加docker-compose.override.yml到.gitignore.
在 prod env 中:ln -s ./docker-compose.prod.yml ./docker-compose.override.yml
在 test env 中: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/
- ...
Run Code Online (Sandbox Code Playgroud)
那么你已经完成了。在每个环境中,您都可以使用具有相同命令的 compose-filedocker-compose up
如果您不确定,请用于docker-compose config检查它是否被正确覆盖。
| 归档时间: |
|
| 查看次数: |
9802 次 |
| 最近记录: |