В чем разница между COPY и ADD в Docker

«В чем разница между COPY и ADD в Docker» — вопрос из категории DevOps, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

  1. COPY — просто копирует файлы/директории из хоста в образ.
    Пример:
    COPY ./app /app
  1. ADD — делает то же самое, но с дополнительными возможностями:

    • Распаковывает локальные .tar-архивы автоматически.
    • Поддерживает URL в качестве источника (но без распаковки).
      Пример:
    ADD app.tar.gz /app  # архив распакуется
    ADD https://example.com/file.txt /tmp/  # скачает файл

Когда использовать:

  • COPY — для простого копирования (рекомендуется по умолчанию).
  • ADD — только если нужны его специфичные фичи (распаковка или URL).

⚠️ ADD с URL менее предсказуем (нет проверки checksum), а его "магия" с архивами может запутать.