Docker-构建本地开发,安装依赖项

时间:2017-11-11 22:31:02

标签: docker docker-compose

我正在尝试为本地开发和生产设置docker-compose架构,我无法确定在容器生命中何时安装库依赖项的最佳时机。与此同时,我不确定这些是否应该放在容器中或外部容积中。

我的所有代码都安装在外部卷中,以便在不重建容器的情况下立即进行更改,但我不确定需要通过pip安装的库(我正在运行python后端)和npm / yarn(对于webpack前端)。

将requirments.txt和package.json放入容器中并在容器构建过程中运行pip install和yarn install意味着我必须在依赖项更改时重建容器 - 这是一个太多的开销。

将它们放入外部卷并在每个容器启动时运行 pip install yarn install 作为命令的一部分,似乎解决问题。

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

这是正确的做法吗?我看到很多例子正在完成oposite并在容器的构建过程中运行 npm install - 但我没有看到任何优势,我错过了什么?

1 个答案:

答案 0 :(得分:1)

安装dependecies通常是构建过程的一部分。在开发时,安装代码是一个很好的技巧,以便直接反映变化。

关于添加requirements.txtpackage.json。安装dependecies需要时间,为此您需要利用docker layer缓存。特别是,您希望避免缓存失效。

对于pip,我在开发阶段建议以下内容:对于不太可能更改的依赖项,请在单独的RUN实例中安装它们。您的Docker文件看起来像。

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

仅保留requirements.txt中可能更改的依赖项。完成开发后,将包添加回requirements.txt并使用需求文件进行构建。

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