Docker组成本地开发,安装依赖关系

我正在尝试为本地开发和生产设置docker-compose体系结构,并且我无法确定何时在容器中生活,这是安装库依赖性的最佳时机。 同时我不确定这些应该放在容器里还是外置。

我所有的代码都安装在外部卷中,所以在不重build容器的情况下可以立即进行更改,但是我不确定需要使用pip(我正在运行python后端)和npm / yarn(用于webpack前端-结束)。

将requirments.txt和package.json放到容器中,并在容器构build过程中运行pip install和yarn install意味着我必须在依赖关系发生变化时重新构build容器 – 这是太多的开销。

把它们放在一个外部卷中,运行pip installyarn install作为每个容器启动时的命令的一部分似乎解决了这个问题。

然后每个容器的构build过程只包含平台依赖(例如,安装python,webpack或其他平台工具),但是在启动之后安装库(使用CMD指令)。

这是正确的方法吗? 我已经看到了很多的例子,正好相反,并在容器的构build过程中运行npm安装 – 但我没有看到任何优势,我错过了什么?

安装依赖通常是构build过程的一部分。 为了直接反映变化,开发代码是一个很好的技巧。

关于添加requirements.txtpackage.json 。 安装依赖需要时间,为此您需要利用docker图层caching。 特别是,你想避免caching失效。

对于点子,我build议在开发阶段进行以下操作:对于不太可能更改的依赖项,请将这些安装在单独的RUN指令中。 你的Docker文件看起来像这样。

 FROM .. RUN pip install package1 package2 package3 ... ADD requirements.txt requirements.txt RUN RUN pip install -r requirements.txt ... 

只保留r​​equirements.txt中可能会改变的依赖关系。 完成开发之后,将程序包重新添加到requirements.txt中,然后使用需求文件进行构build。

类似的方法是添加两个需求文件,最后将它们合并。