当前位置:   article > 正文

Dockerfile 中的 COPY 与 ADD 区别_dockerfile add copy区别

dockerfile add copy区别

1、COPY命令

COPY命令用于将于Dockerfile所在目录中的文件在镜像构建阶段从宿主机拷贝到镜像中,对于文件而言可以直接将文件复制到镜像中,代码如下:

  1. FROM frolvlad/alpine-java:jre8-slim
  2. MAINTAINER oas.cloud
  3. ARG JAR_FILE
  4. COPY ${JAR_FILE} /usr/local/oas/
  5. WORKDIR /usr/local/oas/

对于目录而言,该命令只复制目录中的内容而不包含目录自身,代码如下:

  1. FROM frolvlad/alpine-java:jre8-slim
  2. MAINTAINER oas.cloud
  3. COPY nickdir .
  4. WORKDIR /usr/local/oas/

2、ADD命令

ADD命令相对于COPY命令,可以解压缩文件并把它们添加到镜像中的功能,如果我们有一个压缩文件包,并且需要把这个压缩包中的文件添加到镜像中。需不需要先解开压缩包然后执行 COPY 命令呢?当然不需要!我们可以通过 ADD 命令一次搞定:

  1. FROM frolvlad/alpine-java:jre8-slim
  2. MAINTAINER oas.cloud
  3. ADD nickdir.tar.gz .
  4. WORKDIR /usr/local/oas/

同时ADD还可以从 url 拷贝文件到镜像中,但官方不推荐这样使用,官方建议我们当需要从远程复制文件时,最好使用 curl 或 wget 命令来代替 ADD 命令。原因是,当使用 ADD 命令时,会创建更多的镜像层,当然镜像的 size 也会更大,代码如下:

  1. ADD http://example.com/big.tar.xz /usr/src/things/
  2. RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
  3. RUN make -C /usr/src/things all

如果使用下面的命令,不仅镜像的层数减少,而且镜像中也不包含 big.tar.xz 文件,代码如下:

  1. RUN mkdir -p /usr/src/things \
  2. && curl -SL http://example.com/big.tar.xz \
  3. | tar -xJC /usr/src/things \
  4. && make -C /usr/src/things all

所以ADD命令官方推荐只有在解压缩文件并把它们添加到镜像中时才需要。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/58118
推荐阅读
相关标签
  

闽ICP备14008679号