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

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

Ответ

Инструкция COPY — это основной и рекомендуемый способ добавления локальных файлов и директорий из контекста сборки (папки на хосте) в образ Docker. Она простая и предсказуемая.

Для чего я её применяю:

  • Копирование исходного кода приложения в образ для сборки или запуска.
  • Добавление конфигурационных файлов (например, nginx.conf, appsettings.json).
  • Копирование скриптов инициализации или зависимостей.

Пример из практики:

# Копируем файл с зависимостями Python
COPY requirements.txt /tmp/requirements.txt
# Устанавливаем зависимости (этот слой кэшируется отдельно от кода)
RUN pip install -r /tmp/requirements.txt

# Копируем весь исходный код приложения в рабочую директорию
WORKDIR /app
COPY . .

# Копируем отдельный конфиг, перезаписывая дефолтный
COPY ./config/production.cfg /etc/app/config.cfg

Ключевые отличия от ADD:

  • COPY не распаковывает архивы автоматически.
  • COPY не поддерживает загрузку файлов по URL.
  • Это делает поведение COPY явным и понятным, что соответствует принципам написания чистых и поддерживаемых Dockerfile.