- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个如下所示的 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 层? (我意识到最后一个副本有第四层)
我仍然需要单独的最后一份副本。这是故意的。拆分最后一层的原因是 npm install 仅依赖于 package.json 文件,这样如果我更改源代码,则不需要重建所有层,只需重建最后一层。仅当我更改 package.json 文件时,才需要重建第一层并执行新的 npm 安装。对于使用单个模块的我来说,这是一个很好的模式,但是现在我有了一个使用本地子模块(本地 npm 模块)的主模块,我陷入了如何减少 COPY 指令的数量以减少层。该技术的完整描述记录在nodejs.org 的文章 "Dockerizing a Node.js web app" 中(并推荐)。
值得一提的是,它在技术上按原样工作,但效率很低,因为它为额外的副本创建了额外的层,而看起来应该可以以某种方式将前三个 COPY 指令组合起来以获得一层。
最佳答案
您正在尝试将其转换为多对多副本。 Dockerfile 语法不支持此功能。您需要在右侧有一个目标目录。如果您的源是一个或多个目录,您需要注意 docker 将复制这些目录的内容,而不是目录名称本身。结果就是你想要的:
COPY json-files/ ./
然后您需要使用名为 docker build .
的目录来组织构建上下文(在 .
中 json-files
或当前目录是发送到 docker 服务器以执行构建的构建上下文)。 (可以是任何名称)仅包含要复制的目录结构中的文件:
| json-files/
|- aaa/package.json
|- bbb/package.json
\- ccc/package.json
<小时/>
选项 2:
您可以将构建构建为多阶段构建,以将其缩减为单层,而无需修改构建上下文本身:
FROM scratch as json-files
COPY ./aaa/package.json /json-files/aaa/package.json
COPY ./bbb/package.json /json-files/bbb/package.json
COPY ./ccc/package.json /json-files/ccc/package.json
FROM your_base
COPY --from=json-files /json-files .
WORKDIR aaa
RUN npm install
COPY ./aaa ./aaa
从 COPY
的角度来看,第二个选项与第一个选项相同。命令,它只有一个图像作为上下文,而不是使用构建命令发送的构建上下文。
综上所述,对于不会相互覆盖的小型单个文件,从 3 个复制命令更改为 1 个复制命令不太可能对性能产生任何明显影响,这看起来像是过早的优化。
关于docker - 如何使用 Dockerfile 中的单个 COPY 层复制不同源目录和目标目录中的多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55566422/
我正在尝试使用谷歌云构建触发器来构建我的 docker 容器。不幸的是,构建没有找到我的 docker 文件。它不在我的存储库的根目录中,但我认为我可以指定一个相对路径。显然我配置错误了。下面是我的
我可以像这样构建一个 Dockerfile docker build -t deepak/ruby . 但是对于一个不名为Dockerfile的Dockerfile # DOCKER-VERSION
是否可以命名构建阶段?我正在搜索类似以下示例的内容: ARG NAME FROM python:3.7-alpine as modul-${NAME} # ... 如果我尝试这个例子,就会发生这个错误
在我的 Dockerfile 中,我需要使用命令替换来添加一些环境变量。我想设置 ENV PYTHONPATH /usr/local/$(python3 -c 'from distutils impo
以下Dockerfile包含四个COPY层: COPY README.md ./ COPY package.json ./ COPY gulpfile.js ./ COPY __BUILD_NUMBE
我正在尝试从我创建的 Dockerfile 中拉取 tomcat,并使用以下命令拉取 centos: FROM centos RUN docker run -it tomcat 然后现在我正在创建一个
我不确定是否应该为我的 Node.js 应用程序创建不同的 Dockerfile 文件。一种用于没有开发依赖项的生产,另一种用于包含开发依赖项的测试。 或者一个基本上是开发Dockerfile.dev
我拥有的是多个相似且简单的dockerfile 但我想要的是有一个单一的基础 dockerfile 和我的 dockerfile将他们的变量传递给它。 在我的例子中,dockerfile 之间的唯一区
我有一个应用程序有两个 Dockerfile ,说 Dockerfile.foo和 Dockerfile.bar ,预计将为 docker-compose.yml 的两个不同服务生成两个不同的图像.
我是一个 docker maven 插件新手。 如果我理解得很好,根据Spotify's Dockerfile Maven documentation ,应该将 Dockerfile 放在我的项目的根
我正在设置一个docker容器,将在this article之后在nginx服务器上为我的Angular 5应用程序提供服务。 本文提出了这个Dockerfile: # Stage 0, based
大家好, 我是 docker 的新手,我想容器化我的 ASP.NET Core 应用程序,但出现错误,我无法继续构建我的图像 这是我的示例 Dockerfile FROM microsoft/dotn
我想在不使用注册表的情况下链接 Dockerfiles,这可以通过 FROM 实现吗?陈述? 以两个 Dockerfile 为例: Dockerfile /some/other/dir/Dockerf
我尝试在公共(public) dockerhub 上通过我自己的镜像安装 Airflow,但它在本地运行完美,但当我尝试在 Openshift 上使用它时。我在下面收到此错误。 `ERROR: Cou
此 dockerfile 工作正常。但是如何在 dockerfile 中执行命令? FROM alpine RUN apk add --update sqlite && rm -rf /var/cac
当我尝试设置自动构建时,我的 Docker Hub 存储库中的 Dockerfile 为空。如果我触发构建:- Build failed: Dockerfile not found at ./Dock
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题?通过 editing this post 添加详细信息并澄清问题. 1年前关闭。 Improve this
我目前正在将一个巨大的 DockerFile 拆分为单独的 DockerFile,但是在巨大的 DockerFile 中定义的一些变量需要在单独的 DockerFile 中使用。 Docker 是否有
我有一个 Dockerfile 可以创建我想在这里使用的构建镜像:~/build/Dockerfile 然后我使用一个标准镜像来部署 从 ~/build/Dockerfile 构建的图像没有在任何地方
我运行这个: ➜ frontend git:(master) ✗ docker-compose up Building web ERROR: Cannot locate specified Dock
我是一名优秀的程序员,十分优秀!