Gymterview
middle

В чём разница между COPY и ADD?

COPY и ADD — это инструкции Dockerfile для копирования файлов в образ, но ADD обладает дополнительными возможностями, которые в большинстве случаев не нужны.

COPY — простое копирование

Пример
COPY target/app.jar /app/app.jar
COPY config/ /app/config/

ADD — расширенное копирование

Пример
# Автоматически распаковывает tar-архив
ADD archive.tar.gz /app/

# Может загружать файл по URL (не рекомендуется)
ADD https://example.com/file.txt /app/

Рекомендация

Всегда используйте COPY, если вам не нужна автоматическая распаковка архивов. Это делает Dockerfile более прозрачным и предсказуемым. ADD с URL считается анти-паттерном — лучше использовать RUN curl или RUN wget, чтобы можно было контролировать процесс и удалить загруженный файл в том же слое:

Пример
# Плохо
ADD https://example.com/tool.tar.gz /opt/

# Хорошо
RUN curl -fsSL https://example.com/tool.tar.gz | tar -xz -C /opt/

На собеседовании: короткий ответ: используйте COPY всегда, кроме случаев, когда нужна автоматическая распаковка tar-архива. ADD с URL — анти-паттерн. Этот вопрос проверяет, знаете ли вы best practices написания Dockerfile.