跳转至

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. COPYADD的区别

  • 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镜像构建中的高效应用,避免常见误区,提升镜像构建的效率和可维护性。