Docker ADD指令

ADDCOPY指令的格式和性质基本是一致的,ADD是在 COPY的基础上增加了一些不太实用的能力。

最佳实践

在官方Dockerfile最佳实践文档中要求:尽可能使用COPY,因为COPY 的语义很明确--复制文件,而 ADD 包含了更复杂的功能,其行为不一定很清晰。
最适合使用ADD 的场合,就是下面第2点的场景。

指令格式

ADD 原资源路径 目标路径

使用说明

  1. 原资源路径是一个URL
    Docker 引擎会试图去下载该链接对应的资源文件并放到目标路径。这个功能其实并不实用,并且不推荐使用,因为:下载的文件权限为600,如果权限不符合需求,还需要增加额外的RUN指令来调整权限;另外,如果下载的是压缩包,并且需要解压缩时,也需要增加RUN指令来解压,所以不如直接使用 RUN指令,然后使用wget或者curl工具下载,处理权限、解压缩、并且清理无用文件更合理。
  2. 原资源路径tar压缩包
    ADD指令将会自动解压缩文件到目标路径
    在某些情况下,这个自动解压缩的功能非常有用,比如官方镜像 ubuntu中有如下用法:

    FROM scratch
    ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /

另外需要注意,ADD 指令会令镜像构建缓存失效,进而导致镜像构建变得比较缓慢,因此在选择 COPYADD 指令的时候,可以遵循这样的原则,所有的文件复制均使用 COPY 指令,仅在需要自动解压缩的场合时使用 ADD,在使用ADD该指令的时候还可以加上--chown=<user>:<group> 选项来改变文件的所属用户及所属组。
例如:

ADD --chown=55:mygroup files* /mydir/
ADD --chown=bin files* /mydir/
ADD --chown=1 files* /mydir/
ADD --chown=10:11 files* /mydir/
THE END
分享
二维码
< <上一篇
下一篇>>