【问题标题】:Copy specific file first and the copy all in Dockerfile首先复制特定文件,然后将所有文件复制到 Dockerfile
【发布时间】:2017-05-03 19:11:24
【问题描述】:

以下是我的 Dockerfile:

FROM node:4.6.0

WORKDIR /src

COPY node_modules/ /src/node_modules

COPY . /src/

CMD ["/bin/bash"]

我想提高效率,以便仅在目录中有任何更改时才复制节点模块。否则,我只想将源文件复制到图像中。 这会按预期工作吗?

【问题讨论】:

  • “这会按预期工作吗?” -- 你试过了吗?
  • 当然我试过了,但是我无法判断 node_modules 是复制了一次、两次还是没有。我的问题是这种方法的效率。
  • Dockerfile 中的命令只在构建镜像时执行一次。我不会担心他们的效率。无论如何,我认为您的命令会复制 node_directory 两次。如果您希望 Docker 映像中的 node_modules 内容始终保持最新,则不应将其复制到映像中。每次运行时,使用VOLUME 和-v 命令行选项将主机目录映射到映像的/src/node_modules 目录。
  • @axiac "我认为你的命令复制了 node_directory 两次" -v,因为构建的图像将部署到开发人员。测试环境。
  • 过去的爆炸,但是 1) 它将被复制两次 2) 这是一种不好的方法,因为如果有人使用 mac 构建,您最终可能会为 mac 构建依赖项,然后复制到一个会导致问题的 linux 操作系统。

标签: docker dockerfile


【解决方案1】:

这将复制两次。 Docker 缓存查看当前命令和上一层。如果当前命令的 Docker 上下文发生了变化,它将运行。它不使用部分缓存来运行。

【讨论】:

  • 感谢您的评论。有没有办法保证只复制一次node_modules?目前我能想到的就是在.dockerignore 文件中列出node_modules,但我想知道是否有其他选择。
  • 保证的唯一方法是复制 node_modules 然后手动复制其他所有内容而不是 COPY 。 /src/ 因此,您将对目录中的所有内容都有单独的 COPY 命令,并首先为 node_modules 运行 COPY。它更详细并创建更多层。但这是确保 node_modules 被复制一次且仅一次的唯一方法。
猜你喜欢
  • 1970-01-01
  • 2022-09-23
  • 2018-05-17
  • 2018-09-13
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
相关资源
最近更新 更多