Для чего нужна инструкция ADD в Dockerfile?

«Для чего нужна инструкция ADD в Dockerfile?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Инструкция ADD в Dockerfile копирует файлы, директории или удалённые файлы (по URL) из контекста сборки или из сети внутрь образа контейнера. Её ключевая особенность — автоматическая распаковка локальных архивов (.tar, .tar.gz, .tar.xz, .tar.bz2).

Когда я её использую:

  1. Для добавления и распаковки архивов: Например, когда нужно добавить в образ предварительно собранный дистрибутив приложения.
    ADD ./application.tar.gz /opt/myapp/
    # Содержимое архива будет автоматически распаковано в /opt/myapp/
  2. Для загрузки файлов из интернета: Хотя это возможно, на практике я предпочитаю использовать RUN с wget или curl для лучшего контроля над кэшированием слоёв и обработкой ошибок.
    ADD https://example.com/some-package.tar.gz /tmp/
    # Файл будет скачан, но НЕ распакован, если это удалённый URL.

Важное замечание: В большинстве случаев для простого копирования локальных файлов предпочтительнее использовать COPY, так как оно более предсказуемо и прозрачно. ADD со своей «магией» распаковки может привести к неочевидному поведению и увеличению размера образа, если это не требуется.