dockerfile中add和copy的區(qū)別

在 Dockerfile 中,ADDCOPY 都是用于將文件或目錄從宿主機復(fù)制到鏡像中的指令,但它們有一些關(guān)鍵的區(qū)別:

  1. 功能差異

    • COPY:只用于將文件或目錄從源路徑復(fù)制到目標(biāo)路徑。它比較簡單,沒有其他功能。
    • ADD:除了具有 COPY 的功能外,還能夠自動解壓縮從源路徑復(fù)制的壓縮文件(如 .tar、.gz、.bz2 等)。此外,ADD 還可以通過指定 URL 從遠(yuǎn)程 URL 下載文件并將其復(fù)制到目標(biāo)路徑。
  2. 使用場景

    • COPY:推薦在只需要復(fù)制文件或目錄時使用 COPY,因為它的功能比較簡單且更明確,能夠提升 Dockerfile 的可讀性。
    • ADD:適合在需要解壓縮文件或從遠(yuǎn)程 URL 下載文件的場景下使用,但如果不需要這些額外功能,使用 COPY 會是更好的選擇。
  3. 語法

    • COPYCOPY <源路徑>... <目標(biāo)路徑>
    • ADDADD <源路徑>... <目標(biāo)路徑>

示例

  • 使用 COPY 復(fù)制本地文件:

    COPY ./myfile.txt /app/myfile.txt
    
  • 使用 ADD 復(fù)制并解壓縮文件:

    ADD test.tar.gz /app/
    
  • 使用 ADD 從 URL 下載文件:

# 基礎(chǔ)鏡像
FROM ubuntu:20.04
# 設(shè)置環(huán)境變量
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
# 設(shè)置工作目錄
WORKDIR /usr/src/app
# 復(fù)制應(yīng)用程序文件
# COPY ./target  /usr/src/app\
COPY ./target/addtest.txt  /usr/src/app/
ADD ./target/test.tar.gz /usr/src/app/
# 安裝依賴
RUN apt-get update && apt-get install -y python3-pip
RUN pip3 install --no-cache-dir -r requirements.txt
# 暴露端口
EXPOSE 8080
# 運行應(yīng)用程序
CMD ["python3", "app.py"]
  • 執(zhí)行build命令,創(chuàng)建鏡像:
 docker build -f Dockerfile.nginx -t addnginx:v1 .
  • test.tar.gz中的文件:


    image.png
  • 容器對應(yīng)路徑中的文件如下,可見test.tar.gz已經(jīng)被解壓出來了


    image.png

總結(jié)來說,如果只是簡單地復(fù)制文件或目錄,使用 COPY 更為合適;如果需要解壓縮或下載遠(yuǎn)程文件,可以選擇使用 ADD

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容