Dockerfile如何通过单条COPY语句减少镜像构建层数
Dockerfile多COPY指令合并方案
完全可以通过单条COPY命令实现你需要的效果,具体操作根据你是否可以调整本地构建上下文的目录结构分为两种情况:
可调整本地目录结构
只要将需要复制的文件/目录,按照容器内的目标路径组织成完全一致的层级结构即可:
- 把
requirements.txt放在构建上下文根目录(如果你之前指定了非根的WORKDIR,就放在对应WORKDIR的同级目录下) - 新建
opt目录,将templates、goss、newman三个目录直接移入opt目录 - 将
conftest.py移入opt/validation/目录下
调整完成后的本地目录结构如下:
构建上下文根目录 ├── requirements.txt └── opt ├── validation │ ├── 原validation目录的所有原有内容 │ └── conftest.py ├── templates ├── goss └── newman
之后使用单条COPY指令即可:COPY . /
这条指令会把本地构建上下文的所有内容按目录层级原样复制到容器根目录,和你原来的6条COPY指令效果完全一致。如果担心误复制多余文件,可以在构建上下文根目录新增.dockerignore文件,声明不需要复制的文件/目录即可。
不可调整本地目录结构
Dockerfile的COPY指令仅支持指定一个目标路径,如果你不能调整本地目录结构,无法通过单条COPY实现多不同目标路径的复制操作,这种场景下保留原有多条COPY是更合理的选择,不会带来明显的构建性能损耗。
内容的提问来源于stack exchange,提问作者Aman .sinha
相关产品推荐
相关产品推荐

