Docker构建镜像时,ADD和COPY的区别

在Dockerfile中,ADD和COPY命令都能将文件从构建上下文复制到镜像内,但ADD在处理压缩文件如tt.tar.gz时会自动解压到指定目录,而COPY则不提供解压功能。通过示例Dockerfile构建镜像并验证,文件夹1使用ADD后文件被解压,文件夹2使用COPY则保持压缩状态。

区别

ADD和COPY都可以把当前目录里的文件拷贝到临时容器中,但是ADD和COPY在拷贝压缩文件时存在一些区别。ADD把压缩文件拷贝到临时容器时会自动解压,COPY不带解压功能。

验证

  • dockerfile2内容如下
FROM hub.c.163.com/library/centos
MAINTAINER sun
RUN mkdir /1 /2
ADD tt.tar.gz /1
COPY tt.tar.gz /2
CMD ["/bin/bash"]
  • 编译镜像后,查看
    在这里插入图片描述
    在这里插入图片描述

  • 创建容器验证
    在这里插入图片描述
    文件夹1使用ADD,文件自动解压;
    文件夹2使用COPY,文件并没有解压。

Dockerfile 中,`RUN`、`CMD`、`ADD` `COPY` 是常见的指令,它们各自承担不同的职责,适用于不同的使用场景。以下是对这些指令的详细解释区别分析: ### `RUN` 指令 `RUN` 指令用于在镜像构建过程中执行命令。它是在执行 `docker build` 命令运行的,通常用于安装软件包或执行其他构建步骤。每个 `RUN` 指令都会在当前镜像层上创建一个新的层,并将结果提交到镜像中。在一个 Dockerfile 中可以有多个 `RUN` 指令。 示例: ```Dockerfile RUN apt-get update && apt-get install -y curl ``` ### `CMD` 指令 `CMD` 指令用于指定容器启动默认执行的命令。它在 `docker run` 命令执行运行,并且可以在运行容器通过命令行参数覆盖。如果 Dockerfile 中包含多个 `CMD` 指令,则只有最后一条会被使用。 示例: ```Dockerfile CMD ["nginx", "-g", "daemon off;"] ``` ### `ADD` 指令 `ADD` 指令用于将文件、目录或远程 URL 的内容复制到镜像中的指定位置。它支持自动解压压缩文件,并且可以处理远程 URL 资源。然而,这种自动解压远程资源处理的功能在某些情况下可能会带来不可预期的结果,因此建议在不需要这些功能使用 `COPY`。 示例: ```Dockerfile ADD app.tar.gz /var/www/html/ ``` ### `COPY` 指令 `COPY` 指令的功能与 `ADD` 类似,但它仅支持将本地文件或目录复制到镜像中,不支持自动解压或处理远程 URL。因此,当只需要复制本地文件,`COPY` 是更推荐的选择,因为它更透明可预测。 示例: ```Dockerfile COPY . /var/www/html/ ``` ### 指令区别总结 1. **执行机**: - `RUN` 在构建镜像执行。 - `CMD` 在运行容器执行。 - `ADD` `COPY` 在构建镜像执行,用于复制文件。 2. **覆盖性**: - `CMD` 可以通过 `docker run` 命令行参数覆盖。 - `RUN`、`ADD` `COPY` 不可覆盖,它们在构建镜像已经确定。 3. **功能**: - `RUN` 用于执行任意命令。 - `CMD` 用于指定容器启动的默认命令。 - `ADD` 支持复制文件、目录远程 URL,并且可以自动解压。 - `COPY` 仅支持复制本地文件目录,不支持自动解压或远程 URL。 4. **使用场景**: - 使用 `RUN` 来安装软件包或执行构建步骤。 - 使用 `CMD` 来提供容器启动的默认命令。 - 如果需要复制文件且不需要自动解压或远程 URL 支持,优先使用 `COPY`。 - 如果需要自动解压或复制远程 URL 文件,则使用 `ADD`。 通过合理使用这些指令,可以更高效地构建 Docker 镜像并确保容器的行为符合预期[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值