cover

概念概覽

flowchart TD
    A[需要將檔案加入映像檔] --> B{來源是什麼?}
    B -->|本地一般檔案| C[使用 COPY]
    B -->|本地壓縮檔 tar/gzip| D{需要自動解壓縮?}
    B -->|遠端 URL| E[使用 RUN curl / wget]
    D -->|是| F[使用 ADD]
    D -->|否| C
    C --> G[語意明確 - 推薦]
    F --> H[自動解壓縮至目標路徑]
    E --> I[更可控的下載方式]

    style C fill:#bfb,stroke:#333
    style F fill:#fbf,stroke:#333
    style E fill:#fbb,stroke:#333

ADD 與 COPY 的基本差異

在 Dockerfile 中,ADDCOPY 都可以將檔案複製到映像檔中,但它們有重要的差異。

COPY 指令

COPY 是最基本的複製指令,功能單純:

COPY <source> <destination>
  • 只能複製本地檔案到容器中
  • 不會自動解壓縮
  • 語意明確,推薦優先使用

ADD 指令

ADD 功能較強大,但也較複雜:

ADD <source> <destination>
  • 可以複製本地檔案
  • 自動解壓縮:如果 source 是壓縮檔(tar, gzip, bzip2, xz),會自動解壓
  • 支援 URL:可以從遠端 URL 下載檔案

該用哪一個?

情境建議指令
一般檔案複製COPY
需要自動解壓縮 tar 檔ADD
從 URL 下載(不推薦)使用 RUN curlRUN wget

最佳實踐

Docker 官方建議:優先使用 COPY,因為語意更明確。只有在需要自動解壓縮功能時才使用 ADD


延伸閱讀