在docker使用中Dockerfile 是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。Dockerfile 中提供了兩個非常相似的命令 COPY 和 ADD,本文將解釋這兩個命令的基本功能,和它們之間的區別,然后總結其各自適合的應用場景。
COPY命令格式為COPY [--chown=:] <源路徑1>... <目標路徑> ,功能是復制指令,從上下文目錄中復制文件或者目錄到容器里指定路徑。而ADD指令的命令格式跟COPY相同。其中上下文目錄指的是docker build 命令的 PATH 或 URL 指定的路徑中的文件的集合。
ADD在執行 <源文件> 為 tar 壓縮文件的話,壓縮格式為 gzip, bzip2 以及 xz 的情況下,會自動復制并解壓到 <目標路徑>,但在不解壓的前提下,無法復制 tar 壓縮文件。會令鏡像構建緩存失效,從而可能會令鏡像構建變得比較緩慢。具體是否使用,可以根據是否需要自動解壓來決定。
當版本1.0的Docker發布時,包含了新的COPY指令。與ADD不同的是,COPY直接將文件和文件夾從構建上下文復制到容器中。COPY不支持URL作為參數,因此它不能用于從遠程位置下載文件。任何想要復制到容器中的東西都必須存在于本地構建上下文中。
另外,COPY對壓縮文件沒有特別的處理。如果您復制歸檔文件,它將完全按照出現在構建上下文中的方式落入容器中,而不會嘗試解壓縮它。
COPY 命令是為最基本的用法設計的,概念清晰,操作簡單。而 ADD 命令基本上是 COPY 命令的超集,可以實現一些方便、酷炫的拷貝操作。ADD 命令在增加了功能的同時也增加了使用它的復雜度,比如從 url 拷貝壓縮文件時弊大于利。在不用自動解壓工作或者添加遠程文件到鏡像中,同樣需求下,官方推薦使用 COPY進行指令操作。








