
概念概覽
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 中,ADD 和 COPY 都可以將檔案複製到映像檔中,但它們有重要的差異。
COPY 指令
COPY 是最基本的複製指令,功能單純:
COPY <source> <destination>- 只能複製本地檔案到容器中
- 不會自動解壓縮
- 語意明確,推薦優先使用
ADD 指令
ADD 功能較強大,但也較複雜:
ADD <source> <destination>- 可以複製本地檔案
- 自動解壓縮:如果 source 是壓縮檔(tar, gzip, bzip2, xz),會自動解壓
- 支援 URL:可以從遠端 URL 下載檔案
該用哪一個?
| 情境 | 建議指令 |
|---|---|
| 一般檔案複製 | COPY |
| 需要自動解壓縮 tar 檔 | ADD |
| 從 URL 下載(不推薦) | 使用 RUN curl 或 RUN wget |
最佳實踐
Docker 官方建議:優先使用 COPY,因為語意更明確。只有在需要自動解壓縮功能時才使用 ADD。