一直以来都把 ADD 当 COPY 来用的,因为一般情况下两者情况差不多,但是最近发现大错特错了。

ADD 除了复制功能,还在还提供两种附加功能解压下载

这是比较奇怪的两个特性,也是因为这样 ADD 变得有点意向不明的意思。

1
ADD Python-3.7.9.tar.xz /root

执行上面的命令后,Python-3.7.9.tar.xz 会自动解压缩到 /root 目录下

这个看似很方便的功能,当你不了解时,反而给调试带来很大的苦恼。

然后就是下载功能,下面的语句可以直接把文件下载到 /root

1
ADD https://npm.taobao.org/mirrors/python/3.7.9/Python-3.7.9.tar.xz /root

这个功能最大的问题时,它不能被缓存,每次都要重新执行,只是在镜像中没有 curl 或者 wget 时倒是挺方便的。

这些功能虽然在某些情况下看上去挺“方便”,然而我们大部分的需求就是复制文件

所以复制文件优先推荐使用 COPY 语句

需要注意的是缓存的使用

1
COPY . /root

当直接复制目录时,有任何文件的变动都会导致上次的缓存失效,所以不是必要的情况,优先推荐使用指定文件全路径进行复制

03-16 09:46