PassFront
  1. PassFront
  2. База знаний
  3. Dockerfile и образы

Чем инструкция COPY отличается от ADD в Dockerfile?

Dockerfile и образы

COPY просто копирует файлы из контекста сборки в образ, а ADD дополнительно умеет распаковывать локальные tar-архивы и скачивать файлы по URL, поэтому почти всегда рекомендуют COPY.

Различия по поведению

  • COPY src /app — единственная операция: копирование файлов и каталогов.
  • ADD archive.tar.gz /app — автоматически распакует архив в целевой каталог.
  • ADD https://example.com/f /app — скачает файл, но без контроля целостности и с плохой инвалидацией кеша.
  • COPY --from=builder /dist /dist копирует файлы из другой стадии multi-stage сборки.

Почему COPY предпочтительнее

  • Поведение предсказуемо: никакой «магической» распаковки неожиданно для читающего Dockerfile.
  • Скачивание лучше делать через RUN curl -fsSL ... && rm ...: тогда можно проверить checksum и очистить временные файлы в том же слое.
  • Официальные best practices Docker прямо советуют COPY, кроме случаев осознанной автораспаковки tar.

Коротко для собеседования

Обе инструкции кладут файлы в образ, но ADD ещё неявно распаковывает tar и умеет качать по URL. По умолчанию берут COPY, а скачивание делают через RUN curl с проверкой контрольной суммы; ADD оставляют для осознанной распаковки локального архива.

Другие вопросы раздела