【问题标题】:Dockerfile use npm cacheDockerfile 使用 npm 缓存
【发布时间】:2021-05-16 12:24:28
【问题描述】:

我有一个 Dockerfile:

FROM node:13.7
WORKDIR /usr/src/app
RUN env

# Layer for npm
COPY package.json package-lock.json ./
RUN npm ci
# Bundle app source
COPY . .
RUN git config http.sslVerify false
RUN npm run lib

RUN npm run docker-build

RUN rm -f .env
RUN ["chmod", "+x", "/usr/src/app/docker-entrypoint.sh"]
RUN ["chmod", "+x", "/usr/src/app/wait-for-it.sh"]
CMD ./docker-entrypoint.sh

如果 package.json 或 package-lock.json 没有改变,我已经只在做npm ci。但我也想避免重新下载所有未更改的 npm 包。如何让 docker 使用 npm 缓存来存储和重用已经下载的包?

【问题讨论】:

    标签: docker npm continuous-integration docker-build


    【解决方案1】:

    我认为您的 docker 缓存在命令 COPY . . 上失效。 您可以在构建日志中检查它并查看行 Using cache 并且在复制命令中它可能不存在) 检查那个答案 Why does my Docker cache get invalidated by this COPY command?

    伙计们说.dockerignore 正在创建以避免处理不必要的文件并帮助我们忽略不必要文件的缓存。

    所以,给出任何想法只是建议。

    而且..RUN npm run docker-build 看起来有些奇怪,因为Dockerfile 正在创建以构建图像..

    您可以在运行docker build . 之前下载所有源代码以避免从 git 的 Dockerfile 克隆它。 (RUN npm run lib 但我不知道它是做什么的)

    您可以使用多阶段构建https://docs.docker.com/develop/develop-images/multistage-build/ 当您在第一阶段构建二进制文件或创建 js 包并将其复制到第二个新系统以尽可能减小图像大小时,它非常有用。

    我可以更详细地描述其中任何一点,或者.. 请您提供更多关于您的情况的信息吗?

    线条是什么?

    RUN npm run lib
    RUN npm run docker-build
    

    你可以在docker build .之前在主机上设置+x标志

    RUN ["chmod", "+x", "/usr/src/app/docker-entrypoint.sh"]
    RUN ["chmod", "+x", "/usr/src/app/wait-for-it.sh"
    

    你为什么在Dockerfile这样做?

    【讨论】:

    • COPY package.json package-lock.json ./ 正在工作,它仅在其中一个 json 更改时执行 RUN npm ci 。但即使在这种情况下,我也想使用 npm 缓存,因为它需要很长时间。 RUN npm run lib 从另一个 git 下载一个库,然后 npm run docker-build 为 Web 编译 JS 代码。但是您对多阶段构建的链接可能会对我有所帮助。
    • 您可以尝试阅读有关 ADD 命令的信息。我可以建议将您的本地 node_modules 打包到 tar 存档并通过命令 ADD educative.io/edpresso/what-is-the-docker-add-command 将其解压缩到 dockerfile 中。所以你的“缓存”包总是被使用。我从来没有这样做过,也许这不是最好的解决方案
    猜你喜欢
    • 2019-10-08
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2014-03-28
    • 1970-01-01
    • 2017-09-27
    • 2021-12-11
    相关资源
    最近更新 更多