在 Dockerfile 中,ADD 和 COPY 都是用于將文件或目錄從宿主機復(fù)制到鏡像中的指令,但它們有一些關(guān)鍵的區(qū)別:
-
功能差異:
-
COPY:只用于將文件或目錄從源路徑復(fù)制到目標(biāo)路徑。它比較簡單,沒有其他功能。 -
ADD:除了具有COPY的功能外,還能夠自動解壓縮從源路徑復(fù)制的壓縮文件(如.tar、.gz、.bz2等)。此外,ADD還可以通過指定 URL 從遠(yuǎn)程 URL 下載文件并將其復(fù)制到目標(biāo)路徑。
-
-
使用場景:
-
COPY:推薦在只需要復(fù)制文件或目錄時使用COPY,因為它的功能比較簡單且更明確,能夠提升 Dockerfile 的可讀性。 -
ADD:適合在需要解壓縮文件或從遠(yuǎn)程 URL 下載文件的場景下使用,但如果不需要這些額外功能,使用COPY會是更好的選擇。
-
-
語法:
-
COPY:COPY <源路徑>... <目標(biāo)路徑> -
ADD:ADD <源路徑>... <目標(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

