Dockerfile 中的 ADD
與 COPY
指令都可以用于將本地文件或目錄復制到 Docker 鏡像中,但它們之間有一些區(qū)別。
1. ADD 指令支持自動解壓縮功能
當使用 ADD
指令將本地文件復制到 Docker 鏡像中時,如果該文件是壓縮包格式,Docker 會自動解壓縮該文件。例如:
ADD nginx-1.21.0.tar.gz /usr/local/
上述例子中在將本地的 nginx-1.21.0.tar.gz
文件復制到 Docker 鏡像的 /usr/local/
目錄下時,Docker 會將該文件解壓縮。
而 COPY
指令并不支持自動解壓縮功能,需要手動解壓縮后再復制進鏡像。
2. ADD 指令可以從 URL 復制內容
ADD
指令除了能夠復制本地文件和目錄外,還可以復制遠程文件(例如從 URL 下載)到 Docker 鏡像中。例如:
ADD https://example.com/nginx-1.21.0.tar.gz /usr/local/
上述例子中會從遠程 URL https://example.com/nginx-1.21.0.tar.gz 下載文件,并將其復制到 Docker 鏡像的 /usr/local/
目錄下。
而 COPY
指令只能復制本地文件和目錄。
3. ADD 指令具有隱式的文件拷貝功能
ADD
指令除了能夠復制本地文件和目錄外,還具有一個隱式的文件拷貝功能:當復制一個壓縮包文件到容器中時,Docker 會自動解壓,并且可以直接從 URL 下載文件并解壓縮。
例如:
ADD package.tar.gz /app/
上述例子中,如果 package.tar.gz
是一個壓縮包文件,則 Docker 會自動解壓縮該文件,并將其復制到 /app/
目錄下。而 COPY
指令無法實現這一功能。
4. 總結
綜上所述,雖然 ADD
和 COPY
指令都可以用于復制文件和目錄到 Docker 鏡像中,但它們之間在使用時存在不同的限制和特性。需要根據實際情況來選擇適合的指令。