Dockerfile中COPY和ADD之間的區別
1.簡介
創建Dockerfile時,通常需要將文件從主機系統傳輸到Docker映像中。這些可能是屬性文件,本機庫或我們的應用程序在運行時需要的其他靜態內容。
Dockerfile規範提供了兩種將文件從源系統複製到映像的方法: COPY
和ADD
指令。
在本文中,我們將研究它們之間的區別以及何時使用它們之間的區別。
2. COPY
和ADD
之間的區別
乍一看, COPY
和ADD
指令看起來相同。它們具有相同的語法:
COPY <source> <destination>
ADD <source> <destination>
兩者都將文件從主機系統複製到Docker映像。
那有什麼區別呢?簡而言之, ADD
指令比COPY
更有能力。
儘管功能上相似,但ADD
指令在兩種方面更強大:
- 它可以處理遠程URL
- 它可以自動提取tar文件
讓我們更仔細地研究這些。
首先, ADD
指令可以接受遠程URL作為其source
參數。另一方面, COPY
指令只能接受本地文件。
請注意,使用ADD
來獲取遠程文件並進行複制通常並不理想。這是因為該文件將增加整個Docker映像的大小。相反,我們應該使用curl
或wget
來獲取遠程文件,並在不再需要它們時將其刪除。
其次, ADD
指令將自動將tar文件擴展到映像文件系統中。儘管這可以減少構建映像所需的Dockerfile步驟數量,但並非在所有情況下都需要這樣做。
請注意,僅當源文件在主機系統本地時才發生自動擴展。
3.何時使用ADD
或COPY
根據Dockerfile最佳實踐指南,除非特別需要ADD
的兩個附加功能之一,否則我們始終應首選COPY
不是ADD
。
如上所述,使用ADD
將遠程文件複製到Docker映像中會創建一個額外的層並增加文件大小。如果我們改用wget
或curl
,則可以在以後刪除文件,它們不會成為Docker映像的永久部分。
此外,由於ADD
命令會自動擴展tar文件和某些壓縮格式,因此可能導致意外的文件被寫入映像中的文件系統。
4。結論
在本快速教程中,我們已經看到了將文件複製到Docker映像中的兩種主要方法: ADD
和COPY
。儘管功能上相似,但大多數情況下首選COPY
指令。這是因為ADD
指令提供了應謹慎使用且僅在需要時使用的其他功能。