1. Введение
При создании файлов Docker часто необходимо перенести файлы из хост-системы в образ Docker. Это могут быть файлы свойств, собственные библиотеки или другой статический контент, который потребуется нашим приложениям во время выполнения.
Спецификация Dockerfile предоставляет два способа копирования файлов из исходной системы в образ : директивы COPY
и ADD .
В этой статье мы рассмотрим различия между ними и когда имеет смысл использовать каждый из них.
2. Разница между КОПИРОВАТЬ
и ДОБАВИТЬ
На первый взгляд директивы COPY
и ADD
выглядят одинаково. У них одинаковый синтаксис:
COPY <source> <destination>
ADD <source> <destination>
И оба копируют файлы из хост-системы в образ Docker .
Так какая разница? Короче говоря, директива ADD
более функциональна, чем COPY
.
Хотя функционально директива ADD
аналогична, она более эффективна в двух отношениях:
- Он может обрабатывать удаленные URL-адреса
- Он может автоматически извлекать файлы tar
Давайте посмотрим на них более внимательно.
Во-первых, директива ADD
может принимать удаленный URL-адрес в качестве исходного
аргумента. Директива COPY
, с другой стороны, может принимать только локальные файлы.
Обратите внимание, что использование ADD
для извлечения удаленных файлов и копирования обычно не является идеальным . Это связано с тем, что файл увеличит общий размер образа Docker. Вместо этого мы должны использовать curl
или wget
для извлечения удаленных файлов и удаления их, когда они больше не нужны.
Во - `` вторых, директива ADD
автоматически расширяет файлы tar в файловую систему образа . Хотя это может уменьшить количество шагов Dockerfile, необходимых для создания образа, это может быть нежелательно во всех случаях.
Обратите внимание, что автоматическое расширение происходит только в том случае, если исходный файл является локальным для хост-системы.
3. Когда использовать ДОБАВИТЬ
или КОПИРОВАТЬ
Согласно руководству по лучшим практикам Dockerfile , мы всегда должны отдавать предпочтение COPY
вместо ADD
, если только нам не нужна одна из двух дополнительных функций ADD
.
Как отмечалось выше, использование ADD
для копирования удаленных файлов в образ Docker создает дополнительный слой и увеличивает размер файла. Если вместо этого мы используем wget
или curl
, мы можем удалить файлы впоследствии, и они не останутся постоянной частью образа Docker.
Кроме того, поскольку команда ADD
автоматически расширяет файлы tar и некоторые сжатые форматы, это может привести к тому, что в файловую систему наших образов будут записаны неожиданные файлы.
4. Вывод
В этом кратком руководстве мы рассмотрели два основных способа копирования файлов в образ Docker: ADD
и COPY
. Хотя функционально директива COPY
похожа, в большинстве случаев предпочтительнее. Это связано с тем, что директива ADD
предоставляет дополнительные функции, которые следует использовать с осторожностью и только при необходимости.