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