COPY
指令
COPY [--chown=<user>:<group>] <源路径>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
描述
COPY 复制文件到容器。
COPY 指令将从构建上下文目录中 <源路径> 的文件或目录复制到新的一层的镜像内的 <目标路径> 位置。比如:
COPY package.json /usr/src/app/
<源路径> 可以是多个,甚至可以是通配符,其通配符规则要满足 Go 的 filepath.Match 规则,如:
COPY hom* /mydir/
COPY hom?.txt /mydir/
<目标路径> 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用 WORKDIR 指令来指定)。
此外,还需要注意一点,使用 COPY 指令,源文件的各种元数据都会保留。比如读、写、执行权限、文件变更时间等。这个特性对于镜像定制很有用。特别是构建相关文件都在使用 Git 进行管理的时候。
在使用该指令的时候还可以加上 --chown=<user>:<group> 选项来改变文件的所属用户及所属组。
COPY --chown=55:mygroup files* /mydir/
COPY --chown=bin files* /mydir/
COPY --chown=1 files* /mydir/
COPY --chown=10:11 files* /mydir/
copy复制目录时,默认只是复制目录中的内容,而不会复制当前的目录。目录路径中目录不存在时会自动创建,但在填写时需要明确指定。例如
COPY tomcat /usr/local/tomcat/
这里会把 tomcat目录中的内容复制到 /usr/local/tomcat 中。如果目标目录写成 /usr/local/ ,则会缺少tomcat这一层目录。
COPY指令还支持通过网络复制文件
COPY --from=hub.c.163.com/qingzhou/etcd:v3.3.13 /usr/local/bin/etcdctl /usr/local/bin/
docker_Dockerfile_dockerfile-copy
文章摘要
本文聚焦于Dockerfile中的COPY指令,详细解析其核心功能、语法、使用场景以及与其他相关指令(如ADD)的区别。COPY指令用于在构建Docker镜像时将本地文件或目录复制到镜像中,是容器管理文件资源的核心工具之一。
核心内容
1. COPY指令的功能与语法
-
基本语法:
COPY <源路径> <目标路径>。- 源路径可以是本地文件或目录。
- 目标路径可以是绝对路径或相对于工作目录(
WORKDIR)的相对路径。
-
使用场景:
- 将应用程序代码、配置文件或静态资源复制到镜像中。
- 在构建过程中分阶段复制文件,优化镜像层结构。
2. COPY与ADD的区别
-
COPY指令的纯粹性:COPY仅支持本地文件的复制,不支持自动解压或从URL下载文件。- 推荐在大多数场景下使用
COPY而非ADD,以保持Dockerfile的简洁性和可维护性。
-
ADD指令的特定功能:ADD支持从URL下载文件并自动解压归档文件(如tar、zip)。- 适用于需要自动解压或从远程获取资源的场景。
3. COPY的多阶段构建应用
- 多阶段构建:
- 展示如何在多阶段构建中使用
COPY指令,将前一阶段的构建结果复制到后续阶段,以优化镜像大小和构建效率。
- 展示如何在多阶段构建中使用
4. COPY的权限与属主管理
- 权限管理:
- 解释如何通过
--chown参数设置复制文件的属主和权限,确保容器内文件的访问符合需求。
- 解释如何通过
5. COPY的最佳实践
- 优化建议:
- 尽量使用
COPY而非ADD,除非需要ADD的特定功能。 - 通过
.dockerignore文件排除不必要的文件,减少镜像体积。 - 结合多阶段构建,仅在最终阶段复制必要的文件,优化镜像层。
- 尽量使用
与其他章节的区别
-
与
docker_Dockerfile_dockerfile-add章节形成对比:- 本节专注于
COPY指令的纯粹文件复制功能,不涉及解压或远程资源下载。
- 本节专注于
-
与
docker_Dockerfile_dockerfile-workdir章节不同:- 本文不涉及工作目录的设置,而是聚焦于构建时的文件复制操作。
-
与
docker_Dockerfile_dockerfile-volume章节相比:- 本节讨论的是构建时的文件复制,而非运行时的数据卷挂载。
-
与
docker_Dockerfile_dockerfile-run章节相比:- 本节不涉及命令执行,而是专注于静态文件的复制操作。
适用场景
COPY指令的适用场景:- 适用于在构建Docker镜像时将本地配置文件、脚本或静态资源复制到容器中。
- 特别适合多阶段构建中跨阶段文件传递的需求。
总结
通过本章节的学习,读者将掌握COPY指令的核心用法及其在Docker镜像构建中的高效应用,避免常见误区,提升镜像构建的效率和可维护性。