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

2023-06-12 10:26:33 +08:00
 vevlins

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

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

4401 次点击
所在节点    Kubernetes
29 条回复
ETiV
2023-06-12 17:19:54 +08:00
“npm install 不在 dockerfile” 还不听劝 😂

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

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

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

https://odh-highlander.github.io/
https://github.com/guimou/odh-highlander
cwliang
2023-06-13 11:21:34 +08:00
可以搜一下 node.js 应用构建 image 馊身方案,比如只安装 dependencies 依赖
cdswyda
2023-06-13 13:41:50 +08:00
提供一个思路, 用一个 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