我需要启动多个 nodejs 容器,怎么共享这些容器的 npm 包缓存

343 天前
 vevlins

在 k8s 集群上启动多个 nodejs 容器(隔离不同用户的代码),数量高至上万个,不同容器的依赖不完全相同。npm install 阶段不在 dockerfile 中,需要在容器启动后安装。核心诉求是:1. 降低安装时间。2.降低空间占用。

本来尝试 pnpm store ,想把 pnpm 全局缓存目录当作存储卷,启动时只需要 link 过去,但发现 k8s 不支持 link 。 有什么好办法吗?

3692 次点击
所在节点    Kubernetes
29 条回复
ETiV
343 天前
“npm install 不在 dockerfile” 还不听劝 😂

有个梗图:容器化是为了解决“在我这儿好使、在对方那里打不开”的问题的…它就是把所有运行所需的依赖打包成一个镜像来达成这一目的的

两件事:
1⃣️
所以你的问题是 node_modules 大,这个可以用 https://pnpm.io/motivation 瘦身一下
2⃣️
然后你说的构建期间 npm install 慢,这个可以缓存一下 node_modules 目录,gitlab 可以配置一个变量 避免被 clean 掉
ETiV
343 天前
哦对 docker image 还有个“层”的概念

你可以先把最基础、都通用的 node_modules COPY 进去,这样再 build 、和 pull 都可以避免重新同步这部分文件内容
vevlins
343 天前
@ETiV 不是不听劝,我的业务要求我必须动态加依赖。
n18255447846
342 天前
npm install --registry local
建个本地源
n18255447846
342 天前
或者 docker volume 挂载 node_modules 目录。没测试过多个容器能否用同一个盘,只是个想法
whileFalse
342 天前
@vevlins 你还是把业务需要完整的说一下比较好
zzl22100048
342 天前
是不是要类似这种效果?
让租户动态的导入依赖库

https://odh-highlander.github.io/
https://github.com/guimou/odh-highlander
cwliang
342 天前
可以搜一下 node.js 应用构建 image 馊身方案,比如只安装 dependencies 依赖
cdswyda
342 天前
提供一个思路, 用一个 docker 做私有仓库,其他的 nodejs 镜像的 npm 安装源都指向这个,也就是所有的安装都会指向你自己的那个 docker ,所谓安装也就是一次文件拷贝。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/947895

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX