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.