Dockerfile中COPY和ADD之間的區別

    1.簡介

    創建Dockerfile時,通常需要將文件從主機系統傳輸到Docker映像中。這些可能是屬性文件,本機庫或我們的應用程序在運行時需要的其他靜態內容。

    Dockerfile規範提供了兩種將文件從源系統複製到映像的方法COPYADD指令。

    在本文中,我們將研究它們之間的區別以及何時使用它們之間的區別。

    2. COPYADD之間的區別

    乍一看, COPYADD指令看起來相同。它們具有相同的語法:

    COPY <source> <destination>
    
     ADD <source> <destination>

    兩者都將文件從主機系統複製到Docker映像。

    那有什麼區別呢?簡而言之, ADD指令比COPY更有能力。

    儘管功能上相似,但ADD指令在兩種方面更強大:

    • 它可以處理遠程URL
    • 它可以自動提取tar文件

    讓我們更仔細地研究這些。

    首先, ADD指令可以接受遠程URL作為其source參數。另一方面, COPY指令只能接受本地文件。

    請注意,使用ADD來獲取遠程文件並進行複制通常並不理想。這是因為該文件將增加整個Docker映像的大小。相反,我們應該使用curlwget來獲取遠程文件,並在不再需要它們時將其刪除。

    其次, ADD指令將自動將tar文件擴展到映像文件系統中。儘管這可以減少構建映像所需的Dockerfile步驟數量,但並非在所有情況下都需要這樣做。

    請注意,僅當源文件在主機系統本地時才發生自動擴展。

    3.何時使用ADDCOPY

    根據Dockerfile最佳實踐指南除非特別需要ADD的兩個附加功能之一,否則我們始終應首選COPY不是ADD

    如上所述,使用ADD將遠程文件複製到Docker映像中會創建一個額外的層並增加文件大小。如果我們改用wgetcurl ,則可以在以後刪除文件,它們不會成為Docker映像的永久部分。

    此外,由於ADD命令會自動擴展tar文件和某些壓縮格式,因此可能導致意外的文件被寫入映像中的文件系統。

    4。結論

    在本快速教程中,我們已經看到了將文件複製到Docker映像中的兩種主要方法: ADDCOPY 。儘管功能上相似,但大多數情況下首選COPY指令。這是因為ADD指令提供了應謹慎使用且僅在需要時使用的其他功能。