您的位置:

Docker ADD COPY 操作详解

一、ADD和COPY的基础概念

ADD和COPY都是Dockerfile中常见的命令,常用于将本地文件复制到镜像中。它们的作用基本相同,不同之处在于ADD命令支持URL作为源文件路径,并且还提供了一些额外功能。

在Dockerfile中使用ADD和COPY命令时,需要指定来源文件路径和目标文件路径。来源文件可以是本地文件系统路径,也可以是一个URL,而目标文件路径则是相对于容器中的文件系统。

二、ADD命令详解

ADD命令的基本用法如下:

ADD [--chown=:
   ] 
    ... 
     

     
    
   
  

其中,--chown参数用于设置复制后文件的所有者和所属组。src表示来源文件,可以是文件或目录,如果是目录,则会递归复制目录中的所有文件和子目录。dest表示目标文件路径,如果不存在则会自动创建。

除了基本用法之外,ADD命令还提供了一些额外功能:

1) 自动解压缩功能:如果来源文件是一个压缩包(如.tar、.tar.gz、.tar.bz2、.tgz等),则ADD命令会自动解压缩该文件并将解压后的内容复制到目标文件路径中。

2) 自动下载功能:如果来源文件是一个URL,则ADD命令会自动下载该文件并将其保存到容器中。

三、COPY命令详解

COPY命令的基本用法如下:

COPY [--chown=:
   ] 
    ... 
     

     
    
   
  

其中,--chown参数用于设置复制后文件的所有者和所属组。src表示来源文件,可以是文件或目录,如果是目录,则会递归复制目录中的所有文件和子目录。dest表示目标文件路径,如果不存在则会自动创建。

COPY命令没有ADD命令的自动解压缩和自动下载功能,但在一般情况下,它的性能比ADD命令更好。

四、ADD和COPY命令的注意事项

1) 在使用ADD或COPY命令时,应当注意来源文件的路径和目标文件路径的指定方式。

2) 避免使用相对路径指定来源文件路径,最好使用绝对路径或者BUILDROOT环境变量。

3) 避免在容器中创建大量的中间文件和目录,应当尽可能的减少复制文件的数量。

五、实例演示

下面是一个使用ADD和COPY命令构建Docker镜像的示例Dockerfile:

FROM alpine:latest
ADD http://example.com/helloworld.tar.gz /usr/local/
COPY myapp /usr/local/bin/
WORKDIR /usr/src/myapp
CMD ["python", "app.py"]

以上Dockerfile将从一个URL下载helloworld.tar.gz文件,并解压缩到/usr/local/目录下。然后,将本地文件myapp复制到/usr/local/bin/目录下。最后,设置容器的工作目录并运行app.py脚本。