Для инструкций ADD
и COPY
в Docker существует несколько лучших практик, направленных на повышение безопасности, прозрачности и эффективности сборки образов.
Основное различие между ADD
и COPY
:
COPY
просто копирует файлы и директории из указанного источника на хосте в указанную точку назначения в контейнере. Источник должен быть локальным файлом или директорией.ADD
имеет более широкие возможности: она может копировать локальные файлы и директории, а также извлекать архивы (tar, gzip, bzip2) и получать файлы по URL.Лучшие практики:
Предпочитайте COPY
перед ADD
: В большинстве случаев достаточно COPY
. Она более прозрачна, так как просто копирует локальные файлы. Использование ADD
для извлечения архивов или загрузки по URL может быть менее предсказуемым и увеличивать сложность сборки.
Используйте COPY
для локальных файлов: Если вам нужно скопировать файлы из контекста сборки в образ, всегда используйте COPY
.
dockerfile
Будьте осторожны с URL в ADD
: Использование ADD
с URL может привести к нестабильности сборки, если удаленный ресурс недоступен. Также это может быть менее безопасным, так как вы зависите от внешнего источника. Предпочтительно использовать curl
или wget
в отдельном слое (RUN
) для загрузки ресурсов по URL, что дает больше контроля и позволяет выполнять проверку контрольной суммы.
dockerfile
Извлекайте архивы в отдельном слое при использовании ADD
: Если вы должны использовать ADD
для извлечения архива (менее распространенный сценарий), убедитесь, что вы делаете это в отдельном слое. Однако, как упомянуто ранее, зачастую более явное извлечение с помощью RUN
предпочтительнее.
Копируйте только необходимые файлы: Не копируйте весь контекст сборки (COPY . /app
), если в нем есть ненужные файлы (исходный код, тестовые данные, скрытые директории и т.п.). Используйте `.dockerign
Для инструкций ADD
и COPY
в Docker существует несколько лучших практик, направленных на повышение безопасности, прозрачности и эффективности сборки образов.
Основное различие между ADD
и COPY
:
COPY
просто копирует файлы и директории из указанного источника на хосте в указанную точку назначения в контейнере. Источник должен быть локальным файлом или директорией.ADD
имеет более широкие возможности: она может копировать локальные файлы и директории, а также извлекать архивы (tar, gzip, bzip2) и получать файлы по URL.Лучшие практики:
Предпочитайте COPY
перед ADD
: В большинстве случаев достаточно COPY
. Она более прозрачна, так как просто копирует локальные файлы. Использование ADD
для извлечения архивов или загрузки по URL может быть менее предсказуемым и увеличивать сложность сборки.
Используйте COPY
для локальных файлов: Если вам нужно скопировать файлы из контекста сборки в образ, всегда используйте COPY
.
dockerfile
Будьте осторожны с URL в ADD
: Использование ADD
с URL может привести к нестабильности сборки, если удаленный ресурс недоступен. Также это может быть менее безопасным, так как вы зависите от внешнего источника. Предпочтительно использовать curl
или wget
в отдельном слое (RUN
) для загрузки ресурсов по URL, что дает больше контроля и позволяет выполнять проверку контрольной суммы.
dockerfile
Извлекайте архивы в отдельном слое при использовании ADD
: Если вы должны использовать ADD
для извлечения архива (менее распространенный сценарий), убедитесь, что вы делаете это в отдельном слое. Однако, как упомянуто ранее, зачастую более явное извлечение с помощью RUN
предпочтительнее.
Копируйте только необходимые файлы: Не копируйте весь контекст сборки (COPY . /app
), если в нем есть ненужные файлы (исходный код, тестовые данные, скрытые директории и т.п.). Используйте `.dockerign
Register or sign in to get access to full answers for all questions from the question bank.