Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker compose用于本地开发,安装依赖项_Docker_Docker Compose - Fatal编程技术网

Docker compose用于本地开发,安装依赖项

Docker compose用于本地开发,安装依赖项,docker,docker-compose,Docker,Docker Compose,我正在尝试为本地开发和生产设置docker compose体系结构,但我不知道在容器生命中何时是安装库依赖项的最佳时机。同时,我不确定这些是否应该放在容器中或外部体积中 我所有的代码都安装在外部卷中,这样就可以在不重建容器的情况下立即进行更改,但我不确定需要由pip安装哪些库。我正在运行python后端和用于webpack前端的npm/Thread 将requirements.txt和package.json放在容器中,并在容器构建过程中运行pip install和warn install,这意

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

我所有的代码都安装在外部卷中,这样就可以在不重建容器的情况下立即进行更改,但我不确定需要由pip安装哪些库。我正在运行python后端和用于webpack前端的npm/Thread

将requirements.txt和package.json放在容器中,并在容器构建过程中运行pip install和warn install,这意味着我必须在依赖项发生变化时重新构建容器,这会带来太多的开销

将它们放在一个外部卷中,并在每个容器启动时作为命令的一部分运行pip install和warn install,似乎可以解决这个问题

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


这是正确的方法吗?我已经看到很多例子在容器的构建过程中完全执行oposite并运行npm安装,但我没有看到任何好处,我是否遗漏了什么?

安装依赖项通常是构建过程的一部分。在开发时,为了直接反映更改,装载代码是一个很好的技巧

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

对于pip,我建议在开发阶段执行以下操作:对于不太可能更改的依赖项,请在单独的运行说明中安装它们。您的Docker文件将类似于

FROM ..
RUN pip install package1 package2 package3 ...
ADD requirements.txt requirements.txt
RUN RUN pip install -r requirements.txt
...
仅保留requirements.txt中可能更改的依赖项。开发完成后,将包添加回requirements.txt并使用requirements文件进行构建


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

依赖项通常会在构建时安装在容器中,否则生产映像会随时间而改变。通过将本地文件装载到映像中,可以解决开发问题。谢谢这种方法的问题是,如果依赖项经常更改,则必须重新构建容器@yamenk bellow提供了一个有趣的想法,即直接列出pip安装依赖项以使用层缓存。感谢为pip安装使用docker层缓存的想法。这一点也可能适用于npm或任何其他工具。我们只需要一组稳定的依赖关系和经常变化的挥发性依赖关系。