了解 Dockerfile 中“COPY”和“ADD”命令之间的区别

了解 Dockerfile 中“COPY”和“ADD”命令之间的区别
了解 Dockerfile 中“COPY”和“ADD”命令之间的区别

Dockerfile 命令解释

Dockerfile 中的“COPY”和“ADD”命令用于将文件引入容器的文件系统,但它们具有不同的功能和最佳使用场景。了解这些差异对于有效管理 Dockerfile 并确保容器化应用程序按预期运行至关重要。

虽然“COPY”主要用于直接文件复制,但“ADD”提供了附加功能,例如处理远程 URL 和提取压缩文件。本文将探讨每个命令的细微差别,指导您何时使用一个命令而不是另一个命令来优化 Docker 构建。

命令 描述
FROM 指定用于正在构建的 Docker 映像的基础映像。
WORKDIR 设置容器内的工作目录。
COPY 将文件或目录从主机复制到容器的文件系统。
ADD 将文件、目录或远程 URL 添加到容器的文件系统,并可以处理文件提取。
RUN 在容器环境中执行命令。
EXPOSE 通知 Docker 容器在运行时侦听指定的网络端口。

Dockerfile命令详解

第一个脚本演示了 COPY Dockerfile 中的命令。这 COPY 指令很简单,用于将文件或目录从主机系统复制到 Docker 容器的文件系统中。在此示例中,脚本以 FROM 命令,它将基础镜像指定为 python:3.8-slim-buster 。这 WORKDIR 命令将容器内的工作目录设置为 /app 。接下来是 COPY 命令,将主机上当前目录的内容复制到 /app 容器中的目录。复制文件后, RUN 命令用于安装在 requirements.txt 文件。最后, EXPOSE 命令使端口 80 对外界可用。

相比之下,第二个脚本强调了 ADD Dockerfile 中的命令。与第一个脚本类似,它以 FROM 命令设置基本图像和 WORKDIR 命令定义工作目录。这里的关键区别是 ADD 命令,用于从远程 URL 添加文件,在本例中, https://example.com/data/archive.tar.gz 。这 ADD 命令不仅可以复制文件,还可以自动解压压缩文件,如下所示 RUN 提取的命令 archive.tar.gz 文件到 /app 目录。在此之后, RUN 命令安装所需的 Python 包,并且 EXPOSE 命令使端口 80 可用。

在 Dockerfile 中使用 COPY

Dockerfile 示例

# Use an official Python runtime as a parent image
FROM python:3.8-slim-buster

# Set the working directory in the container
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

在 Dockerfile 中使用 ADD

Dockerfile 示例

# Use an official Python runtime as a parent image
FROM python:3.8-slim-buster

# Set the working directory in the container
WORKDIR /app

# Add files from a remote URL
ADD https://example.com/data/archive.tar.gz /app/

# Extract the archive file
RUN tar -xzf /app/archive.tar.gz -C /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

深入解析Dockerfile中的COPY和ADD

虽然两者 COPYADD 命令的目的是将文件从主机系统复制到容器的文件系统,它们具有独特的功能和用例,使每个命令适用于不同的场景。这 22 号 命令更简单且更可预测。它最适合用于不需要额外处理(例如提取存档或获取远程文件)的基本文件复制。此命令可确保仅将本地文件和目录复制到容器中,从而维护干净且安全的构建环境。

另一方面, ADD 命令提供了更多功能,但增加了复杂性和潜在的安全风险。这 ADD 命令可以处理 URL 下载并自动提取压缩文件,例如 27 号, .gzip, 和 .bzip2。如果您的构建过程需要在映像创建过程中提取远程资产或档案,这可能会很有用。然而,这些额外的功能也存在风险,例如从远程位置下载时无意覆盖文件和安全漏洞。因此,在做出决定时仔细考虑这些因素至关重要 22 号ADD

有关 Dockerfile 中 COPY 和 ADD 的常见问题和解答

  1. 主要用途是什么 COPY Dockerfile 中的命令?
  2. COPY 命令主要用于将本地文件和目录从主机系统复制到 Docker 容器中。
  3. 你什么时候应该使用 ADD 命令而不是 COPY
  4. 您应该使用 ADD 当您需要从 URL 复制文件或需要在构建过程中提取压缩文件时,请使用命令。
  5. 使用的安全隐患是什么 ADD 命令?
  6. ADD 命令可能会带来安全风险,尤其是从远程 URL 下载文件时,因为它可能会覆盖现有文件或引入漏洞。
  7. 可以吗 COPY 命令提取压缩文件?
  8. 不,该 22 号 命令没有解压压缩文件的能力;它只是按原样复制它们。
  9. 如何 ADD 处理压缩文件的方式与 COPY
  10. ADD 命令自动提取压缩文件,例如 .tar, .gzip, 和 .bzip2 当它们被添加到容器中时。
  11. 是否可以使用通配符 COPY 命令?
  12. 是的,您可以使用通配符 22 号 命令复制与模式匹配的多个文件或目录。
  13. 如果将 URL 提供给 ADD 命令无法访问?
  14. 如果 URL 提供给 ADD 命令无法访问,Docker 构建过程将失败。
  15. 您应该使用哪个命令来进行简单的本地文件复制操作?
  16. 对于简单的本地文件复制操作,您应该使用 22 号 命令,因为它更加直接和安全。
  17. 可以吗 ADD 命令可用于添加来自本地和远程源的文件吗?
  18. 是的 ADD 命令可以添加来自本地源和远程 URL 的文件,使其在某些情况下更加通用。

总结 Docker COPY 和 ADD 命令

了解何时使用 22 号ADD Dockerfile 中的内容对于优化容器构建至关重要。尽管 COPY 对于本地文件来说简单且安全, ADD 提供额外的功能,但代价是增加复杂性和潜在的安全问题。根据您的具体需求选择正确的命令可以提高 Docker 镜像的效率和安全性。