【发布时间】:2019-08-29 04:32:40
【问题描述】:
我有一个如下所示的 Dockerfile:
COPY ./aaa/package.json ./aaa/package.json
COPY ./bbb/package.json ./bbb/package.json
COPY ./ccc/package.json ./ccc/package.json
WORKDIR aaa
RUN npm install
COPY ./aaa ./aaa
基本上模块 aaa 使用 bbb 和 ccc 作为本地 npm 模块
是否可以这样编写,以便前 3 条 COPY 指令使用单个 COPY 指令完成,从而使它们成为 1 层而不是 3 层? (我意识到最后一个 COPY 是第 4 层)
我仍然需要单独的最后一个 COPY。这是故意的。拆分出最后一层的原因是npm install只依赖于package.json文件,这样如果我改源码,就不需要重建所有层,只需要最后一层。只有当我更改 package.json 文件时,它才需要重建第一层并执行新的 npm 安装。这对我来说是一个使用单个模块的好模式,但是现在我有一个使用本地子模块(本地 npm 模块)的主模块,我被困在如何减少 COPY 指令的数量以减少层。在 nodejs.org 的文章 "Dockerizing a Node.js web app"
中记录(并推荐)了该技术的完整描述值得一提的是,它在技术上按原样工作,但它效率低下,因为它为额外的副本创建了额外的层,而看起来应该有可能以某种方式将前三个 COPY 指令组合成一层。
【问题讨论】:
-
此链接中已有解决方案stackoverflow.com/questions/30256386/…
-
@AbhishekDK 你能解释一下如何使用该解决方案来定位不同的文件夹吗? AFAICT 最后一个参数是唯一的输出目录,因此您无法使用该技术将 both
./aaa/and 复制到./bbb/。我弄错了吗? -
@BMitch 不。那也是不一样的。该问题涉及复制整个目录
COPY dirone ./dirone,而我只从每个目录中挑选 package.json。COPY dirone/package.json ./dirone/package.json。有很大的不同。 -
@BMitch 再次,不。这些问题都不是将单个文件从目录中提取出来。它们有很大的不同。
标签: docker dockerfile