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
指令無(wú)法實(shí)現(xiàn)這一功能昼钻。
4. 總結(jié)
綜上所述,雖然 ADD
和 COPY
指令都可以用于復(fù)制文件和目錄到 Docker 鏡像中封寞,但它們之間在使用時(shí)存在不同的限制和特性。需要根據(jù)實(shí)際情況來(lái)選擇適合的指令仅财。