gpt4 book ai didi

node.js - Docker 和 node_modules - 将它们放在一个层或一个卷中?

转载 作者:IT老高 更新时间:2023-10-28 12:45:21 26 4
gpt4 key购买 nike

我正在计划一个 docker 开发环境,并且怀疑将 npm install 作为缓存层运行是否是一个好主意。

我了解到有ways to optimize dockerfiles to avoid rebuilding node_modules unless package.json changes ,但是我不想在每次 package.json 更改时完全重建 node_modules 。一个新的 npm install 对我们来说需要 5 多分钟,并且对 package.json 的更改相当频繁地发生。对于经常审查拉取请求和切换分支的人来说,他们可能不得不忍受每天 5 分钟的 npm installs 的痛苦。

在像我这样的情况下,以某种方式将 node_modules 安装到一个卷中,以便它在构建中持续存在,并且对 package.json 的小更改不会更好吗? t 导致整个依赖树被重建?

最佳答案

是的。不要一遍又一遍地重建 node_modules。只需将它们粘贴在数据容器中并以只读方式安装即可。你可以让一个中央进程不时重建 node_modules

另外一个好处是,您可以获得更可预测的构建,因为您可以强制每个人都使用相同的 Node 模块。如果您想确保您实际测试的内容与您计划投入生产的内容相同,这一点至关重要。

类似这样的东西(未经测试!):

docker build -t my/module-container - <<END_DOCKERFILE
FROM busybox
RUN mkdir -p /usr/local/node
VOLUME /usr/local/node
END_DOCKERFILE

docker run --name=module-container my/module-container

docker run --rm --volumes-from=module-container \
-v package.json:/usr/local/node/package.json \
/bin/bash -c "cd /usr/local/node; npm install"

现在,数据容器 module-container 将包含 /usr/local/node/node_modulespackage.json 指定的模块>。现在应该可以使用 --volume-from=module-container 将其挂载到生产容器中。

关于node.js - Docker 和 node_modules - 将它们放在一个层或一个卷中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27642338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com