Чем инструкция 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 оставляют для осознанной распаковки локального архива.