在 Dockerfile 中,ADD
和 COPY
都是用于将文件或目录从宿主机复制到镜像中的指令,但它们有一些关键的区别:
-
功能差异:
-
COPY
:只用于将文件或目录从源路径复制到目标路径。它比较简单,没有其他功能。 -
ADD
:除了具有COPY
的功能外,还能够自动解压缩从源路径复制的压缩文件(如.tar
、.gz
、.bz2
等)。此外,ADD
还可以通过指定 URL 从远程 URL 下载文件并将其复制到目标路径。
-
-
使用场景:
-
COPY
:推荐在只需要复制文件或目录时使用COPY
,因为它的功能比较简单且更明确,能够提升 Dockerfile 的可读性。 -
ADD
:适合在需要解压缩文件或从远程 URL 下载文件的场景下使用,但如果不需要这些额外功能,使用COPY
会是更好的选择。
-
-
语法:
-
COPY
:COPY <源路径>... <目标路径>
-
ADD
:ADD <源路径>... <目标路径>
-
示例:
-
使用
COPY
复制本地文件:COPY ./myfile.txt /app/myfile.txt
-
使用
ADD
复制并解压缩文件:ADD test.tar.gz /app/
-
使用
ADD
从 URL 下载文件:
# 基础镜像
FROM ubuntu:20.04
# 设置环境变量
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
# 设置工作目录
WORKDIR /usr/src/app
# 复制应用程序文件
# COPY ./target /usr/src/app\
COPY ./target/addtest.txt /usr/src/app/
ADD ./target/test.tar.gz /usr/src/app/
# 安装依赖
RUN apt-get update && apt-get install -y python3-pip
RUN pip3 install --no-cache-dir -r requirements.txt
# 暴露端口
EXPOSE 8080
# 运行应用程序
CMD ["python3", "app.py"]
- 执行build命令,创建镜像:
docker build -f Dockerfile.nginx -t addnginx:v1 .
-
test.tar.gz中的文件:
image.png -
容器对应路径中的文件如下,可见test.tar.gz已经被解压出来了
image.png
总结来说,如果只是简单地复制文件或目录,使用 COPY
更为合适;如果需要解压缩或下载远程文件,可以选择使用 ADD
网友评论