我正在尝试为本地开发和生产设置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 - 但我没有看到任何优势,我错过了什么?
答案 0 :(得分:1)
安装dependecies通常是构建过程的一部分。在开发时,安装代码是一个很好的技巧,以便直接反映变化。
关于添加requirements.txt
或package.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并使用需求文件进行构建。
类似的方法是添加两个需求文件,最后组合它们。