Какова разница между командами COPY и ADD в Dockerfile?
Dockerfile — это текстовый файл, который содержит инструкции для сборки образа Docker. Две популярные команды, которые используются для копирования файлов в образ, это COPY
и ADD
. Несмотря на их схожесть, они имеют несколько ключевых различий, которые важно понимать, особенно для новичков в разработке с использованием Docker.
Команда COPY
Команда COPY
используется для копирования файлов и каталогов из локальной файловой системы в файловую систему образа Docker. Вот ее синтаксис:
COPY <источник> <назначение>
<источник>
— это путь к файлу или каталогу на локальной машине.<назначение>
— это путь, куда будет скопирован файл или каталог внутри образа.
Пример использования COPY:
FROM node:14
# Копируем package.json и package-lock.json
COPY package.json /app/
COPY package-lock.json /app/
# Устанавливаем зависимости
RUN npm install
# Копируем остальные файлы приложения
COPY . /app/
WORKDIR /app
# Запускаем приложение
CMD ["npm", "start"]
Команда ADD
Команда ADD
также используется для копирования файлов, но у нее есть дополнительные возможности. Вот ее синтаксис:
ADD <источник> <назначение>
Кроме копирования файлов, ADD
может:
tar
.Пример использования ADD:
FROM node:14
# Загружаем архив из URL и распаковываем его в /app
ADD https://example.com/app.tar.gz /app/
WORKDIR /app
# Запускаем приложение
CMD ["npm", "start"]
Ключевые отличия
COPY
просто копирует файлы или каталоги.ADD
может распаковывать архивы и загружать файлы по URL.
- Рекомендуется использовать
COPY
, если вы просто хотите скопировать файлы, так как это обеспечивает больший контроль и проще для понимания. - Используйте
ADD
только в случаях, когда вам действительно нужны его дополнительные функции.
COPY
делает явным намерение разработчика, в то время какADD
может ввести в заблуждение, если используется без необходимости.
Заключение
Выбор между командами COPY
и ADD
зависит от ваших нужд. Если вам нужно просто скопировать файлы, используйте COPY
. Если же вам нужно дополнительно распаковать архив или загрузить файл по URL, используйте ADD
. Следуя этим рекомендациям, вы сможете писать более предсказуемые и понятные Dockerfile.